Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Ada
Ada Forum d'entraide sur la programmation en langage Ada
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2011, 11h11   #1
Invité de passage
 
Money Pee
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : Money Pee

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 1
Points : 1
Par défaut problème connexion MySQL Ada

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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
naradas:/home/to101463/db-2.2>gnatmake dbtest.adb
gnatbind -x dbtest.ali
gnatlink dbtest.ali
./db.o: In function `db__connect':
db.adb:(.text+0x15af): undefined reference to `mysql_connect'
./db.o: In function `db__disconnect':
db.adb:(.text+0x16e4): undefined reference to `mysql_close'
./db.o: In function `db__select_db':
db.adb:(.text+0x1824): undefined reference to `mysql_select_db'
./db.o: In function `db__query':
db.adb:(.text+0x1a01): undefined reference to `mysql_query'
db.adb:(.text+0x1ae3): undefined reference to `mysql_store_result'
db.adb:(.text+0x1bb3): undefined reference to `mysql_fetch_row'
db.adb:(.text+0x1c11): undefined reference to `mysql_fetch_field'
./db.o: In function `db__drop_query':
db.adb:(.text+0x1dfd): undefined reference to `mysql_free_result'
./db.o: In function `db__next':
db.adb:(.text+0x1ee7): undefined reference to `mysql_fetch_row'
collect2: ld returned 1 exit status
gnatlink: error when calling /home/Soft/GnatPro/v6.2.2/Linux/RHEL4_2.6/bin/gcc
gnatmake: *** link failed.

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
peemoney est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 12h26   #2
Nouveau Membre du Club
 
Avatar de poincare
 
Homme Henri Poincare
Architecte technique
Inscription : mai 2007
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Henri Poincare
Localisation : France

Informations professionnelles :
Activité : Architecte technique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2007
Messages : 19
Points : 31
Points : 31
Par défaut Utilisation de librairie externe

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
poincare est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/06/2011, 10h12   #3
Invité de passage
 
Money Pee
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : Money Pee

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 1
Points : 1
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 :
1
2
3
4
5
6
7
8
gnatmake  dbtest -g -gnatf -largs -lpthread  -lmysqlclient -L/usr/X11R6/lib -lnsl -lXext -lX11 -lm -lnsl
gnatbind -x dbtest.ali
gnatlink dbtest.ali -g -lpthread -lmysqlclient -L/usr/X11R6/lib -lnsl -lXext -lX11 -lm -lnsl
/home/Soft/GnatPro/v6.2.2/Linux/RHEL4_2.6/bin/../libexec/gcc/i686-pc-linux-gnu/4.3.3/ld: cannot find -lmysqlclient
collect2: ld returned 1 exit status
gnatlink: error when calling /home/Soft/GnatPro/v6.2.2/Linux/RHEL4_2.6/bin/gcc
gnatmake: *** link failed.
make: *** [dbtest] Error 4
Merci encore pour votre aide.
peemoney est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 12h28   #4
Nouveau Membre du Club
 
Avatar de poincare
 
Homme Henri Poincare
Architecte technique
Inscription : mai 2007
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Henri Poincare
Localisation : France

Informations professionnelles :
Activité : Architecte technique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2007
Messages : 19
Points : 31
Points : 31
Par défaut Gnat avec Mysql

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.
poincare est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 14h04   #5
Invité de passage
 
Money Pee
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : Money Pee

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 1
Points : 1
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
peemoney est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 10h42   #6
Invité de passage
 
Money Pee
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : Money Pee

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 1
Points : 1
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é..
peemoney est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 11h51   #7
Nouveau Membre du Club
 
Avatar de poincare
 
Homme Henri Poincare
Architecte technique
Inscription : mai 2007
Messages : 19
Détails du profil
Informations personnelles :
Nom : Homme Henri Poincare
Localisation : France

Informations professionnelles :
Activité : Architecte technique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2007
Messages : 19
Points : 31
Points : 31
Par défaut Gnat + Mysql pour Linux

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:
Copy libmysqlclient.so to some directory that is searched by your system, such as /lib, and update the shared library information by executing ldconfig.
Dans le passé, j'ai fait l'interface Ada avec Mysql mais pour Windows et je n'ai pas eu de pb particulier en version statique.
poincare est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 15h33   #8
Invité de passage
 
Money Pee
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : Money Pee

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 1
Points : 1
Par défaut Gnat + Mysql pour linux

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
peemoney est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 10h20   #9
Invité de passage
 
Money Pee
Inscription : juin 2010
Messages : 7
Détails du profil
Informations personnelles :
Nom : Money Pee

Informations forums :
Inscription : juin 2010
Messages : 7
Points : 1
Points : 1
Par défaut libmysqlclient.a

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
peemoney est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h47.


 
 
 
 
Partenaires

Hébergement Web