IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

undefined symbol: mysql_real_connect [Python 2.X]


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut undefined symbol: mysql_real_connect
    Bonjour,

    J'ai fait pas mal de recherche mais je ne trouve pas ce qui coince.
    Problème Python ou C ?
    Je tente sur le forum Python, après avoir essayé sur le forum C.
    Je crée une librairie C et j'appelle les fonctions à partir de python.

    La fonction de connexion dans le fichier DataBaseAccess.c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include <my_global.h>
    #include <mysql.h>
     
    ...
     
    Mafonction * getDataFromId(int Id, Personnage * currentPersonnage) {
    	//Create and initialize a connection handle object
    	MYSQL connection;
    	if (mysql_init(&connection) == NULL) {
    		printf("Connection handle initialization failed !\n");
    		exit(1);
    	}
     
    	//Connect to MySQL server
    	if (mysql_real_connect(&connection, "localhost", "user", "password", "dbname", 3306, NULL, 0) != NULL) {
    		printf("Connection to remote MySQL server established\n");
    	} else {
     
    		printf("Connection attempt to remote MySQL failed !\n");
    		exit(1);
    	}
     
    	//Close the connection
    	mysql_close(&connection);
    	return 0;
    }

    La ligne de commande de compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -O3 -I/usr/include/mysql -lmysqlclient -fPIC -g3 -o  DataBaseAccess.o -c DataBaseAccess.c
    Aucun problème à la compilation.

    En ligne de commande python, je charge la librairie, puis j'appelle la fonction.
    J'ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    Lib = ctypes.cdll.LoadLibrary('../../lib/DataBaseAccess.so')
      File "/usr/lib/python2.7/ctypes/__init__.py", line 440, in LoadLibrary
        return self._dlltype(name)
      File "/usr/lib/python2.7/ctypes/__init__.py", line 362, in __init__
        self._handle = _dlopen(self._name, mode)
    OSError: ../../lib/DataBaseAccess.so: undefined symbol: mysql_real_connect
    Une idée ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Une bibliothèque en C s'appelle d'abord depuis un programme C (qui va tester la bibliothèque). Histoire de vous convaincre que le symbole mysql_real_connect est à résoudre côté linker ou loader mais que Python n'y est pour rien.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    le symbole mysql_real_connect est à résoudre côté linker ou loader
    C'est effectivement la piste la plus probable, mais toutes les lignes de commande de compilation que j'ai pu trouver et tester n'ont rien changé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -O3 -I/usr/include/mysql -lmysqlclient -fPIC -g3 -o  DataBaseAccess.o -c DataBaseAccess.c
    Est-ce correct ? Dans le bon ordre ?


    Pour être sûr d'avoir les bonnes options, j'ai fait
    renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl
    renvoie
    Je mets donc dans ma ligne de commande de compilation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -O3 -fPIC -g3 -I/usr/include/mysql -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl -o DataBaseAccess.o -c DataBaseAccess.c
    Et bien toujours pareil

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par senacle Voir le message
    C'est effectivement la piste la plus probable, mais toutes les lignes de commande de compilation que j'ai pu trouver et tester n'ont rien changé.
    Les bibliothèques partagées sous Linux sont documentées et vous avez même un "how-to".
    Mon opinion est que c'est le chargeur qui ne trouve pas la bibliothèque mysql (dont a besoin votre bibliothèque). C'est la piste que je creuserai d'abord. Mais à vous de voir.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    C'était (tout simplement ?) un problème dans l'ordre de la commande de compilation.

    Dans cet ordre EXACT, ça fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -O3 -fPIC -g3 -I/usr/include/mysql -o votre_librairie.o -c votre_librairie.c
    gcc -O3 -fPIC -shared -o votre_librairie.so votre_librairie.o -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. undefined symbol: mysql_real_connect
    Par senacle dans le forum C
    Réponses: 12
    Dernier message: 26/05/2018, 12h21
  2. virtual et héritage, ld undefined symbol
    Par grodwar dans le forum C++
    Réponses: 2
    Dernier message: 03/01/2007, 09h00
  3. [E2451] Undefined symbol 'att_nombre'
    Par kaizer dans le forum C++
    Réponses: 9
    Dernier message: 22/10/2006, 13h53
  4. probleme a la compilation:Undefined symbols
    Par djobanaille dans le forum C++
    Réponses: 3
    Dernier message: 07/12/2005, 15h33
  5. Undefined symbol
    Par tchoimars dans le forum C
    Réponses: 2
    Dernier message: 02/12/2005, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo