2012-06-01 13 views
6

Quiero conectarme a una base de datos mysql con C++ en linux. En mi máquina local que estoy usando Ubuntu, e instalado los paquetes de servidor y cliente de MySQL:Configuración de Mysql ++ en Linux

sudo apt-get install mysql-server mysql-client

me encontré con Mysql++ pero tengo algunos problemas al ejecutar ./configure de su paquete binario. El error 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'

veo donde puedo utilizar este comando para especificar la ruta:

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

pero no sé dónde apuntar a. Usé whereis mysql pero no puedo encontrar ningún directorio mysql que contenga un subdirectorio lib. ¿Dónde se instalarían las bibliotecas mysqlclient?


EDIT:

Después de hacer localizar libmysqlclient regresé

/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

tanto, he intentado ./configure --with-mysql-lib=/usr/lib/i386-linux-gnu y parece que completar sin ninguna queja.

Aunque esto resuelve el problema de completar ./configure, todavía tengo más problemas. Cuando corro make las cosas van bien hasta este 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

No estoy muy familiarizado con C++, así que no estoy seguro de lo que significa exactamente el error. Cualquier ayuda o dirección sobre cómo obtener la configuración de Mysql ++ desde este punto sería muy apreciada. Aunque, admito que también estoy empezando a buscar bibliotecas alternativas para usar.

Respuesta

8

este problema se debe a que size_t depende de la inclusión del espacio de nombres stddef antes de llamarlo en los archivos de configuración (make).

tuve el mismo problema (utilizando un servidor de nube amazon EC2 ubuntu 12.04) y lo resolví editando el archivo ofensivo (sql_buffer.cpp ubicado, en mi caso, /home/ubuntu/mysql++-3.1.0/lib) y incluyendo stddef (mientras también mueve el espacio de nombres de cadena hacia arriba):

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

Su pregunta ha sido respondida con esta corrección. PERO, es posible que tenga problemas adicionales, como yo. entonces explico cómo resolví algunos problemas subsecuentes, que usted podría o no tener también.

puede que tenga que utilizar

sudo chown username sql_buffer.cpp 

para poder editar el archivo, dependiendo de la forma en que su instalación es de configuración (soy ubuntu usuario, por ejemplo).

i luego topamos con otro 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 

por lo edité el archivo infractor (genv2.cpp) e incluido espacio de nombres de cadena

#include <string.h> 

luego tuve otro problema:

./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 

pude haber editado Makefile.in pero elegí simplemente ejecutar en la línea de comandos:

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

luego continué el proceso make.

que funcionó para mí: mysql ++ instalado y en ejecución.

+2

Wow, gracias por tomarse el tiempo para escribir esto. Terminé frustrado con él y usé el MYSQL C api directamente. Pero estoy seguro de que su solución ayudará a quienes también tengan este problema en el futuro. – Aaron

+2

también había elegido ese camino originalmente, PERO no pude detectar los errores de mysql (como intentar insertar una entrada de clave duplicada)) y eso haría abortar mi programa, así que seguí donde lo había dejado (me beneficié de su solución del paso 1 [ubicación de los archivos lib]). –

1

Es necesario instalar los archivos de cabecera (DEV), que suponen uno de estos:

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 no debe ser necesario porque los archivos se instalan en las ubicaciones predeterminadas.

+0

libmysqlclient16 -> Este es el que debe instalar –

+0

Ok, dice "E: no se puede localizar el paquete libmysqlclient16" cuando intento apt-get install libmysqlclient16. No estoy muy familiarizado con Linux, ¿necesito descargar esto manualmente? – Aaron

+1

Pruebe 'apt-cache search mysql' para buscar libs disponibles. – Thor

Cuestiones relacionadas