Compiler un client MySQL avec MinGW GCC

4 October 2007 | Programmation

Pour la petite histoire, je suis actuellement en train développer la version Web de Transtyler à partir de la version WinForms écrite en C#.

Les technologies utilisées sont Open Source, à la fois pour le développement et l’hébergement, en l’occurence Apache pour le serveur Web, MySQL pour le serveur de base de données et CodeBlocks configuré pour MinGW GCC, pour le développement en C++ de l’application CGI.

Dans le cadre de ce développement, j’ai rencontré quelques difficultés lors de l’édition de liens de l’application CGI, comme le montre le message d’erreur ci-dessous.

.objs\main.o:main.cpp:(.text+0x290): undefined reference to `mysql_init@4'
.objs\main.o:main.cpp:(.text+0x2df): undefined reference to `mysql_real_connect@32'
.objs\main.o:main.cpp:(.text+0x2f4): undefined reference to `mysql_error@4'
.objs\main.o:main.cpp:(.text+0x342): undefined reference to `mysql_real_query@12'
.objs\main.o:main.cpp:(.text+0x357): undefined reference to `mysql_error@4'
.objs\main.o:main.cpp:(.text+0x37f): undefined reference to `mysql_store_result@4'
.objs\main.o:main.cpp:(.text+0xbe5): undefined reference to `mysql_free_result@4'
.objs\main.o:main.cpp:(.text+0xbf6): undefined reference to `mysql_close@4'

Ces erreurs sont générées car la librairie lib/opt/libmysql.lib que j’utilise ne convient pas à MinGW GCC.

Plus précisement, le fichier libmysql.def livré avec la distribution de MySQL pour Windows liste des noms de fonctions qui ne sont pas assez détaillées pour MinGW GCC.

Par exemple, mysql_affected_rows au lieu de mysql_affected_rows@4.

Pour contourner ce problème, vous pouvez utiliser la procédure suivante.

  1. Remplacez le fichier C:\Program Files\MySQL\MySQL Server 5.0\include\libmysql.def par celui-ci contenu dans l’archive libmysql.zip (dernière mise à jour le 21.04.2008) ;
  2. Lancez l’invite de commande ;
  3. Exécutez la commande suivante :
    cd “C:\Program Files\MySQL\MySQL Server 5.0″
  4. Exécutez la commande suivante :
    dlltool –input-def include/libmysql.def –dllname lib/opt/libmysql.dll –output-lib lib/opt/libmysql.a -k
  5. Configurez CodeBlocks pour qu’il utilise la librairie lib/opt/libmysql.a au lieu de lib/opt/libmysql.lib.

La phase d’édition de liens de votre client MySQL devrait maintenant se dérouler sans reporter des erreurs du type de celles indiquées au début de cet article.

Remarque : Le fichier libmysql.def proposé ne contenant pas la définition détaillée de toutes les fonctions de MySQL, n’hésitez pas à le compléter et à me l’adresser pour que je le mette à jour.

  1. Une Réponse à “Compiler un client MySQL avec MinGW GCC”

  2. Bonjour,

    Merci pour ton aide. Je te retourne les définitions que j’ai dû mettre à jour (MySQL 5.01, sous VISTA)

    mysql_server_init@12
    mysql_server_end@0
    mysql_info@4

    Cordialement
    PS

    Par PS le 21 Apr 2008

Poster un commentaire