2008-11-11 9 views
3

Lors de la construction d'une application qui accède à une base de données MySQL sous linux en utilisant C/C++, je dois créer un lien dynamique dans la bibliothèque client mysql. Existe-t-il un moyen de lier statiquement l'application pour que les bibliothèques client mysql ne soient plus nécessaires?Applications MySQL et C

Quelle est la meilleure pratique, en ce qui concerne le développement C \ C++, d'inclure des requêtes plutôt longues dans l'application mais en dehors du code? Utiliser des procédures stockées n'est pas possible car la base de données s'exécute sur un serveur MySQL 4.

+0

veuillez diviser ceci en deux questions – Alnitak

Répondre

1

Il devrait être facile de créer les bibliothèques client mysql statiques. Si vous avez téléchargé la source, vous devez juste vous assurer de la configurer de manière appropriée: ./configure --enable-static Ceci devrait générer libmysql/libmysqlclient.a (ou éventuellement libmysql/.libs/libmysqlclient.a) qui devrait être facile à lier statiquement dans votre exécutable.

Vous aurez besoin de votre exécutable pour être sous licence GPL ou vous devrez acheter une licence appropriée auprès des gens de MySQL.

0

La ligne de commande de compilation suivante a fonctionné pour moi de lier statiquement les libs client mysql:

gcc -I/usr/include/mysql -c mysql.c 
gcc -o mysql mysql.o -static -lmysqlclient -static-libgcc -lm -lz -lpthread 

Cependant, j'ai reçu les avertissements suivants, qui peuvent ou peuvent ne pas être un problème pour vous. Il semble dire qu'il existe une dépendance sur la machine cible ayant la même version glibc que votre machine de construction.

/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(mf_pack.o): In function `unpack_dirname': 
(.text+0x6cc): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(libmysql.o): In function `read_user_name': 
(.text+0x5ed7): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(mf_pack.o): In function `unpack_dirname': 
(.text+0x6e1): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(my_gethostbyname.o): In function `my_gethostbyname_r': 
(.text+0x3c): warning: Using 'gethostbyname_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmysqlclient.a(libmysql.o): In function `mysql_server_init': 
(.text+0x695d): warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking