|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Money Pee Inscription : juin 2010 Messages : 7 ![]() |
Bonjour,
Je vous vous demander de l'aide car je suis vraiment bloqué dans mon stage: Je dois connecter mon programme Ada à une base de données MySQL: En gros, lorsque je compile mon programme j'ai l'érreur suivante: Code :
Alors, j'ai vu un peu sur le projet gnade dans la section "Building programs with MySQL" la commande suivante "gnatmake .... -largs .. L/usr/lib/mysql -ladamysql -lmysqlclient" donc lorsque je lance cette commande, j'ai la même erreur. Est ce que quelqu'un a déjà été confronté à ce type de problème?? Merci de votre aide, ca fait deux jours que je galère pour cette connexion. Merci d'avance |
||
|
|
00
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Henri PoincareArchitecte technique Inscription : mai 2007 Messages : 19 ![]() |
le loader ld ne trouve pas les librairies où sont référencés les symboles.
Ce n'est pas une question spécifique à Mysql, mais qui se pose chaque fois qu'on interface des librairies dans un autre langage. Il est nécessaire d'avoir les librairies externes lib*.a (et de les construire éventuellement) dans le chemin de recherche fourni au loader. L'utilisation des librairies dynamiques (DLL pour Windows/so pour Linux) est documenté : http://gcc.gnu.org/onlinedocs/gnat_u...with-GNAT.html |
|
|
10
|
|
|
#3 | ||
|
Invité de passage
![]() Money Pee Inscription : juin 2010 Messages : 7 ![]() |
Merci pour votre réponse.
Ca me permets d'y voir un peu plus clair sur les messages d'érreurs. Par contre ou est ce que je peux trouver les librairies externes lib*.a? J'ai un fichier makefile dans mon dossier, mais lorsque je fais un make j'ai l'erreur suivante: Code :
|
||
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Henri PoincareArchitecte technique Inscription : mai 2007 Messages : 19 ![]() |
Pour être plus précis, pour utiliser une base de données il faut disposer
de la bibliothèque client (aussi appelée connector) http://dev.mysql.com/doc/refman/5.1/en/connector-c.html et il y a 2 manières de faire le lien entre l'appli Ada et le bibliothèque client : soit edition de lien statique soit edition de lien dynamique (appelée aussi relocatable) Je ne sais pas quel binding avec Mysql, Gnade ou autre, vous utilisez, mais la démarche pour faire la version statique est : 1/ on utilise le client/connecteur du C : 2/il faut téléchager le fichier du client C, le compiler pour obtenir un fichier objet (p.exemple libmysqlclient.o) et donner ce nom à gnatlink qui le passe au loader. Utiliser l'option -v dans gnatlink pour avoir plus de précsion. Coté Ada : Il faut un fichier de specifications .ads qui reprend le fichier header .h du client avec les pragma Interface (C , , ) L'executable final contiendra le client mysql : il n'y a pas besoin d'un fichier .so. Pour la version dynamique, on génére un fichier .so (shared object) avec le source du client/connecteur en C.par exemple libmysqlclient.so 2/ 2eme étape : il faut construire soi-même le fichier utilisé par Gnat pour connaitre le fichier .so. ce fichier s'appelera libxxx.a et il sera utilisé uniquement par le linker. Dans l'executable, il n'a aura pas le client Mysql qui sera chargé dynamiquement, il faudra donc fournir le fichier .so avec l'appli. Il est souhaitable de créer un fichier projet de librairie *.gpr pour utiliser la bibliothèque. Normalement, la version statique est la plus facile. Si le binding est utilisé dans plusieurs appli, la version dynamique est préférable. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Money Pee Inscription : juin 2010 Messages : 7 ![]() |
Merci Pointcare
J'ai télécharger le connecteur C, j'ai aussi téléchargé Cmake pour pouvoir l'installer.: Mais ya t il une différence entre le connecteur C et le fichier du client C? Pour le coté Ada, j'ai déjà un fichier .ads dans mon appli correspondant à l'appli de la base db.ads, faut il créer un nouveau .ads pour le connecteur? sinon comment l'inclure dans mon db.ads? Merci d'avance |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Money Pee Inscription : juin 2010 Messages : 7 ![]() |
Je me suis renseigné. Les librairies clientes fournies avec le serveur MySQL sont intégrées dans l’installation. Il n’est donc pas utile d’installer le Connector/C si le besoin est simplement d’avoir une librairie client.
Mon problème maintenant c'est de trouver le lmysqlclient car lorsque je lance la compilation : gnatmake dbtest.adb -largs -L/usr/lib/mysql -lmysqlclient; il ne trouve pas le -lmysqlclient et j'ai l'érreur suivante: /home/Soft/GnatPro/v6.2.2/Linux/RHEL4_2.6/bin/../libexec/gcc/i686-pc-linux-gnu/4.3.3/ld: cannot find -lmysqlclient Lorsque je vais sur mon repertoire lib de l'install il y a des fichiers comme libmysqlclient.so mais je ne trouve nulle part mon lmysqlclient afin de le passer au loader.. Merci de votre aide, je suis vraiment bloqué.. |
|
|
00
|
|
|
#7 | |
|
Nouveau Membre du Club
![]() Henri PoincareArchitecte technique Inscription : mai 2007 Messages : 19 ![]() |
J'ai recherché dans la doc de Mysql et il y a une page sur les pbs de link :
http://dev.mysql.com/doc/refman/5.5/...-problems.html le pb rencontré a peut-être un rapport avec la dernière ligne : Citation:
|
|
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Money Pee Inscription : juin 2010 Messages : 7 ![]() |
Merci pour ta réponse, j'ai suivi ton conseil et ça va un peu mieux sauf que lorsque je mets le chemin ou il faut trouver libmysqlclient.so il y a une erreur d'incompatibilité:
/usr/bin/ld: skipping incompatible /home/Soft/MySQL/5.0/SunOS/5.10/lib/libmysqlclient.so when searching for -lmysqlclient /usr/bin/ld: skipping incompatible /home/Soft/MySQL/5.0/SunOS/5.10/lib/libmysqlclient.a when searching for -lmysqlclient /usr/bin/ld: cannot find -lmysqlclient Du coup le loader ne trouve toujours pas.. Je devrais également le faire pour Windows donc si tu as un exemple à proposer je serais preneur.. Merci poincare |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Money Pee Inscription : juin 2010 Messages : 7 ![]() |
Après mon problème d'incompatibilité j'ai un ultime problème sur lequel je bloque:
/usr/lib64/mysql/libmysqlclient.a: could not read symbols: File format not recognized collect2: ld returned 1 exit status Est ce mon libmysqlclient.a qui n'est pas bon? Mercii |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com