2012-06-01 20 views
6

Voglio connettermi ad un database mysql con C++ in linux. Sulla mia macchina locale Sono in esecuzione Ubuntu, ed ho installato i pacchetti server e client mysql:Impostazione Mysql ++ in linux

sudo apt-get install mysql-server mysql-client

mi sono imbattuto Mysql++ ma alcuni problemi durante l'esecuzione di ./configure dal loro pacchetto binario. L'errore dice:

checking for MySQL library directory... configure: error: Didn't find mysqlclient library in '/usr/lib64 /usr/lib /usr/lib64/mysql /usr/lib/mysql /usr/local/lib64 /usr/local/lib /usr/local/lib/mysql /usr/local/mysql/lib /usr/local/mysql/lib/mysql /usr/mysql/lib/mysql /opt/mysql/lib /opt/mysql/lib/mysql /sw/lib /sw/lib/mysql'

vedo dove posso utilizzare questo comando per specificare il percorso:

./configure --with-mysql-lib=/...

, ma non so dove puntare a. Ho usato whereis mysql ma non riesco a trovare alcuna directory mysql che contenga una sottodirectory lib. Dove dovrebbero essere installate le librerie mysqlclient?


EDIT:

Dopo aver fatto individuare libmysqlclient sono tornato

/usr/lib/i386-linux-gnu/libmysqlclient.so.18
/usr/lib/i386-linux-gnu/libmysqlclient.so.18.0.0
/usr/lib/i386-linux-gnu/libmysqlclient_r.so.18
/usr/lib/i386-linux-gnu/libmysqlclient_r.so.18.0.0
/usr/share/doc/libmysqlclient18
/usr/share/doc/libmysqlclient18/changelog.Debian.gz
/usr/share/doc/libmysqlclient18/copyright
/var/cache/apt/archives/libmysqlclient18_5.5.22-0ubuntu1_i386.deb
/var/lib/dpkg/info/libmysqlclient18:i386.list
/var/lib/dpkg/info/libmysqlclient18:i386.md5sums
/var/lib/dpkg/info/libmysqlclient18:i386.postinst
/var/lib/dpkg/info/libmysqlclient18:i386.postrm
/var/lib/dpkg/info/libmysqlclient18:i386.shlibs

Così, ho provato ./configure --with-mysql-lib=/usr/lib/i386-linux-gnu e sembra completare senza lamentarsi.

Sebbene questo risolva il problema di ottenere ./configure per il completamento, ho ancora ulteriori problemi. Quando eseguo make le cose vanno bene fino a questo punto:

In file included from ./lib/sql_buffer.h:31:0, from ./lib/sql_buffer.cpp:26: ./lib/refcounted.h:258:2: error: ‘size_t’ does not name a type ./lib/refcounted.h: In constructor ‘mysqlpp::RefCountedPointer::RefCountedPointer()’: ./lib/refcounted.h:89:2: error: class ‘mysqlpp::RefCountedPointer’ does not have any field named ‘refs_’ ./lib/refcounted.h: In constructor ‘mysqlpp::RefCountedPointer::RefCountedPointer(T*)’: ./lib/refcounted.h:100:2: error: class ‘mysqlpp::RefCountedPointer’ does not have any field named ‘refs_’ ./lib/refcounted.h:104:4: error: ‘refs_’ was not declared in this scope ./lib/refcounted.h:104:16: error: expected type-specifier before ‘size_t’ ./lib/refcounted.h:104:16: error: expected ‘;’ before ‘size_t’ ./lib/refcounted.h: In constructor ‘mysqlpp::RefCountedPointer::RefCountedPointer(const ThisType&)’: ./lib/refcounted.h:112:2: error: class ‘mysqlpp::RefCountedPointer’ does not have any field named ‘refs_’ ./lib/refcounted.h:115:8: error: ‘refs_’ was not declared in this scope ./lib/refcounted.h: In destructor ‘mysqlpp::RefCountedPointer::~RefCountedPointer()’: ./lib/refcounted.h:125:7: error: ‘refs_’ was not declared in this scope ./lib/refcounted.h: In member function ‘void mysqlpp::RefCountedPointer::swap(mysqlpp::RefCountedPointer::ThisType&)’: ./lib/refcounted.h:246:13: error: ‘refs_’ was not declared in this scope make: *** [mysqlpp_sql_buffer.o] Error 1

io non sono davvero familiarità con C++, quindi non sono sicuro di cosa significa esattamente l'errore. Sarebbe molto apprezzato qualsiasi aiuto o direzione su come ottenere l'installazione di Mysql ++ da questo punto. Anche se, ammetto che sto anche iniziando a cercare librerie alternative da usare.

risposta

8

questo problema è causato perché size_t dipende dall'inclusione dello spazio dei nomi stddef prima che venga chiamato nei file di configurazione (make).

ho avuto lo stesso problema (utilizzando un server cloud amazon EC2 ubuntu 12.04) e l'ho risolto modificando il file incriminato (situato, nel mio caso, /home/ubuntu/mysql++-3.1.0/lib) e incluso stddef (spostando anche lo spazio dei nomi delle stringhe in alto):

#include <stddef.h> 
#include <string.h> 
#include "sql_buffer.h" 

la vostra domanda è stata risolta con questa correzione. MA, potresti avere ulteriori problemi, come ho fatto io. quindi spiego come ho risolto alcuni problemi successivi, che potresti avere o non potresti avere anche tu.

potrebbe essere necessario utilizzare

sudo chown username sql_buffer.cpp 

per essere in grado di modificare il file, a seconda di come la vostra installazione è messa a punto (io sono ubuntu utente, ad esempio).

Ho poi ha urtato un altro problema:

./ssx/genv2.cpp: In function âbool generate_ssqls2(const char*, const ParseV2*)â: 
./ssx/genv2.cpp:70:28: error: âstrcmpâ was not declared in this scope 

così ho modificato il file incriminato (genv2.cpp) e incluso namespace stringa

#include <string.h> 

poi ho avuto un altro problema con:

./libmysqlpp_ssqls2parse.a(ssqls2parse_parsev2.o): In function `Type': 
/home/ubuntu/mysql++-3.1.0/./ssx/parsev2.cpp:256: undefined reference to `mysqlpp::internal::str_to_lwr 

avrei potuto modificare Makefile.in ma ho scelto semplicemente eseguire in linea di comando:

sudo g++ -o test_ssqls2 test_ssqls2_ssqls2.o -lmysqlpp_ssqls2parse -L. -lmysqlclient -L/usr/lib/x86_64-linux-gnu -lmysqlpp 

ho quindi continuato il processo make.

che ha funzionato per me: mysql ++ installato e in esecuzione.

+2

Wow, grazie per aver dedicato del tempo per scrivere questo. Ho finito per sentirmi frustrato e ho usato il MYSQL C api direttamente, ma sono sicuro che la tua soluzione aiuterà coloro che hanno anche questo problema in futuro! – Aaron

+2

avevo scelto quel percorso originariamente anche, MA non potevo catturare errori mysql (come il tentativo di inserire una voce di chiave duplicata) e questo avrebbe fatto abortire il mio programma, quindi ho seguito il punto in cui era rimasto (ho tratto vantaggio dalla soluzione del passo 1 [posizione dei file lib]). –

1

È necessario installare i file di intestazione (dev), suppongo uno di questi:

apt-cache search mysql 
... 
libmysqlclient-dev - MySQL database development files 
libmysqlclient16 - MySQL database client library 
libmysql++-dev - MySQL C++ library bindings (development) 
libmysqlcppconn-dev - MySQL Connector for C++ (development files) 
... 

--with-mysql-lib non dovrebbe essere necessario in quanto i file verranno installati nei percorsi predefiniti.

+0

libmysqlclient16 -> Questo è quello che dovresti installare –

+0

Ok, si dice "E: Impossibile trovare il pacchetto libmysqlclient16" quando provo apt-get install libmysqlclient16. Non ho molta familiarità con Linux, devo scaricarlo manualmente? – Aaron

+1

Prova 'apt-cache search mysql' per cercare le librerie disponibili. – Thor

Problemi correlati