QT+MySQL (1ª parte): Compilar el driver MySQL para QT Windows

Si usas la versión de Windows XP de la QT seguramete habrás descubierto que el driver para MySQL no viene “de serie” por lo que es necesario compilarlo.

El problema a la hora de compilarlo es que las librerías libmysql.dll y libmysql.lib están compiladas con el compilador de Microsoft y no son compatibles con el compilador MinGW (el compilador para el que vienen preparadas las QT Open Edition). De tal forma que cuando intentemos crear nuestro driver nos encontraremos con un simpático mensaje similar a éste:

tmpobjrelease_sharedqsql_mysql.o(.text+0x4273):qsql_mysql.cpp: undefined refe
rence to `mysql_init@4'
tmpobjrelease_sharedqsql_mysql.o(.text+0x436e):qsql_mysql.cpp: undefined refe
rence to `mysql_real_connect@32'
tmpobjrelease_sharedqsql_mysql.o(.text+0x441d):qsql_mysql.cpp: undefined refe
rence to `mysql_select_db@8'
tmpobjrelease_sharedqsql_mysql.o(.text+0x449d):qsql_mysql.cpp: undefined refe
rence to `mysql_get_client_version@0'
tmpobjrelease_sharedqsql_mysql.o(.text+0x44b7):qsql_mysql.cpp: undefined refe
rence to `mysql_get_server_version@4'
tmpobjrelease_sharedqsql_mysql.o(.text+0x4642):qsql_mysql.cpp: undefined refe
rence to `mysql_close@4'
...
collect2: ld returned 1 exit status
mingw32-make[1]: *** [........pluginssqldriversqsqlmysql.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.1.3/src/plugins/sqldrivers/mysql'
mingw32-make: *** [release] Error 2

Afortunadamente existe una solución: convertir las librerías a un formato válido para MinGW. Esto se hace con unos sencillos pasos:


cd c:\mysql\lib\opt
reimp -d libmysql.lib
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib  libmysql.a

(*) reimp viene en el paquete “MinGW-utililities”, que puede encontrarse en: http://sourceforge.net/project/showfiles.php?group_id=2435

(**) se supone que MySQL está instalado en (c:\mysql)

Ahora tenemos una librería llamada libmysql.a compatible con MinGW, ya sólo nos queda compilar el driver Mysql. Ahora podemos hacerlo tal y como se indican en las instrucciones de las QT:

  1. cd c:\qt\src\plugins\sqldrivers\mysql
  2. qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE"  "LIBS+=-LC:\MYSQL\LIB\OPT -lmysql"  mysql.pro
  3. make (por si acaso haz un “make clean” antes de make).

¡Listo! ya podemos disfrutar de nuestro nuevo y flamante driver para MySQL.

Fuente: Foros de las QT (un buen sitio para resolver tus dudas).

Ten en cuenta que la librería libmysql.dll (C:\mysql\lib\opt\libmysql.dll) tiene que estar disponible para el programa (tiene que estar en la variable PATH o en el mismo directorio que nuestro programa). En caso contrario el driver no se cargará correctamente.

2 thoughts on “QT+MySQL (1ª parte): Compilar el driver MySQL para QT Windows

  1. Muy buen articulo, me salvo horas de estar peleando con los compiladores…. lastima que no lo agregan en la documentacion oficial de qt…
    gracias de nuevo

Deja un comentario