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

Linux Discussion :

Comment développer un programme avec gcc qui permet de me connecter à MYSQL ?


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Comment développer un programme avec gcc qui permet de me connecter à MYSQL ?
    Bonjour,
    Depuis plusieurs jours je tente de me connecter à ma base de données sous Linux. J'ai écrit un programme en c utilisant la bibliothèque mysql.h (MySQL-client-5.1.43-1.glibc23.i386.rpm) l’installation me semble ok puisque il s’agit d’un rpm, et le tous semble s’avoir installé dans :
    /usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit
    Voici le chemin du fichier mysql.h
    /usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/mysql.h

    A la compilation de nombreuses erreur y sont générés les voici.
    Avec #include <mysql.h>

    gcc mysql-c-api_c.c -o mysql-c-api_c

    mysql-c-api_c.c:6:19: erreur: mysql.h : Aucun fichier ou dossier de ce type
    mysql-c-api_c.c: In function 'main':
    mysql-c-api_c.c:10: erreur: 'MYSQL' undeclared (first use in this function)
    mysql-c-api_c.c:10: erreur: (Each undeclared identifier is reported only once
    mysql-c-api_c.c:10: erreur: for each function it appears in.)
    mysql-c-api_c.c:10: erreur: 'conn' undeclared (first use in this function)
    mysql-c-api_c.c:11: erreur: 'MYSQL_RES' undeclared (first use in this function)
    mysql-c-api_c.c:11: erreur: 'res' undeclared (first use in this function)
    mysql-c-api_c.c:12: erreur: 'MYSQL_ROW' undeclared (first use in this function)
    mysql-c-api_c.c:12: erreur: expected ';' before 'row'
    mysql-c-api_c.c:25: attention : incompatible implicit declaration of built-in function 'exit'
    mysql-c-api_c.c:31: attention : incompatible implicit declaration of built-in function 'exit'
    mysql-c-api_c.c:38: erreur: 'row' undeclared (first use in this function)


    Avec #include </mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/mysql.h>


    gcc mysql-c-api_c.c -o mysql-c-api_c

    mysql-c-api_c.c:6:77: erreur: /mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/mysql.h : Aucun fichier ou dossier de ce type
    mysql-c-api_c.c: In function 'main':
    mysql-c-api_c.c:10: erreur: 'MYSQL' undeclared (first use in this function)
    mysql-c-api_c.c:10: erreur: (Each undeclared identifier is reported only once
    mysql-c-api_c.c:10: erreur: for each function it appears in.)
    mysql-c-api_c.c:10: erreur: 'conn' undeclared (first use in this function)
    mysql-c-api_c.c:11: erreur: 'MYSQL_RES' undeclared (first use in this function)
    mysql-c-api_c.c:11: erreur: 'res' undeclared (first use in this function)
    mysql-c-api_c.c:12: erreur: 'MYSQL_ROW' undeclared (first use in this function)
    mysql-c-api_c.c:12: erreur: expected ';' before 'row'
    mysql-c-api_c.c:25: attention : incompatible implicit declaration of built-in function 'exit'
    mysql-c-api_c.c:31: attention : incompatible implicit declaration of built-in function 'exit'
    mysql-c-api_c.c:38: erreur: 'row' undeclared (first use in this function)


    Avec #include <mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/mysql.h>

    gcc mysql-c-api_c.c -o mysql-c-api_c

    mysql-c-api_c.c: In function 'main':
    mysql-c-api_c.c:25: attention : incompatible implicit declaration of built-in function 'exit'
    mysql-c-api_c.c:31: attention : incompatible implicit declaration of built-in function 'exit'
    /home/stephanepierre/tmp/ccHZ50qe.o: In function `main':
    mysql-c-api_c.c:(.text+0x35): undefined reference to `mysql_init'
    mysql-c-api_c.c:(.text+0x77): undefined reference to `mysql_real_connect'
    mysql-c-api_c.c:(.text+0x86): undefined reference to `mysql_error'
    mysql-c-api_c.c:(.text+0xbf): undefined reference to `mysql_query'
    mysql-c-api_c.c:(.text+0xce): undefined reference to `mysql_error'
    mysql-c-api_c.c:(.text+0xff): undefined reference to `mysql_use_result'
    mysql-c-api_c.c:(.text+0x130): undefined reference to `mysql_fetch_row'
    mysql-c-api_c.c:(.text+0x144): undefined reference to `mysql_free_result'
    mysql-c-api_c.c:(.text+0x14f): undefined reference to `mysql_close'
    collect2: ld a retourné 1 code d'état d'exécution
    Voici le code :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    /*
    J'ai tente ceci 
    #include <mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/mysql.h>
    et
    #include </mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/mysql.h>
    */
    #include <mysql.h>
    #include <stdio.h>
     
    int main(void) {
       MYSQL *conn;
       MYSQL_RES *res;
       MYSQL_ROW row;
      /* Change me */
       char *server = "localhost";
       char *user = "root";
       char *password = "PASSWORD";
       char *database = "mysql";
     
       conn = mysql_init(NULL);
     
       /* Connect to database */
       if (!mysql_real_connect(conn, server,
             user, password, database, 0, NULL, 0)) {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(1);
       }
     
       /* send SQL query */
       if (mysql_query(conn, "show tables")) {
          fprintf(stderr, "%s\n", mysql_error(conn));
          exit(1);
       }
     
       res = mysql_use_result(conn);
     
       /* output table name */
       printf("MySQL Tables in mysql database:\n");
       while ((row = mysql_fetch_row(res)) != NULL)
          printf("%s \n", row[0]);
     
       /* close connection */
       mysql_free_result(res);
       mysql_close(conn);
     
      return 0;
    }
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    soit tu mets le chemin en entier soit tu lui dis ou aller le chercher ...
    ta troisième solution fonctionne parce que le path /usr/include est inclus de base dans gcc et il retombe sur ses pattes. (comme pour sys/. etc...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <mysql.h>
     
    gcc -g -I/usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/ mysql-c-api_c.c -o mysql-c-api_c
    vu la longueur de ton dossier je préfère polluer la ligne de compil


    Le problème dans ton 3ème cas c'est le link, tu ne lui as pas donné la librairie mysql qu'il demande: libmysql.so

    par contre où elle est ça c'est la question, (logiquement elle devrait être dans /usr/lib/.../libmysql.so
    tente un find /usr/. -name "libmysql*"

    Ensuite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -g -I/usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/ -L$PATH -lmysql mysql-c-api_c.c -o mysql-c-api_c

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Comment puis-je configurer le gcc pour qu'il supporte le mysql-connector?
    Alors si c'est possible j'aimerai configurer le gcc pour que je n'ai pas à définir le chemin complet dans l'en-tête #include et dans la ligne de commande gcc.


    Le fichier mysql.h se trouve dans :
    /usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/


    Le fichier libmysql.so se trouve dans :
    /usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/lib/

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -g -I/usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/ -L/usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/lib/ -lmysql mysql-c-api_c.c -o mysql-c-api_c
    par contre l'endroit ou t'as installé ton package est un peu space, mais bon c'est ton archi

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai lancer la compilation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -g -I/usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/include/ -L/usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/lib/ -lmysql mysql-c-api_c.c -o mysql-c-api_c

    Tous semble avoir été compilé avec succès mais, quand je lance la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /home/userx/mysql-c-api_c

    ce message d'erreur est affiché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /home/userx/mysql-c-api_c: error while loading shared libraries: 
    libmysql.so.16: 
    cannot open shared object file: 
    Nosuch file or directory
    Quelle est la nature de cette erreur?
    Comment puis-je corriger la situation?

    Le fichier libmysql.so.16 est situé:
    /usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/lib/

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par xnone Voir le message
    ce message d'erreur est affiché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /home/userx/mysql-c-api_c: error while loading shared libraries: 
    libmysql.so.16: 
    cannot open shared object file: 
    Nosuch file or directory
    Quelle est la nature de cette erreur?
    Tu utilises une librairie dynamique (chargée lors de l'exécution) mais le système ne la trouve pas dans les dossiers standards des librairies dynamiques
    Citation Envoyé par xnone Voir le message
    Comment puis-je corriger la situation?
    En modifiant ta variable "LD_LIBRARY_PATH" ou en faisant en sorte (par une recopie ou un lien) que le fichier "libmysql.so.16" soit dans "/usr/lib" (toutefois cette méthode a l'inconvénient que tu seras obligée de la répéter pour l'ensemble des fichiers ".so" utilisés par ton programme)

    Citation Envoyé par xnone Voir le message
    Le fichier libmysql.so.16 est situé:
    /usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/lib/
    Modifie ton environnement de travail soit en passant par le fichier ".bash_profile" ou ".profile" selon que t'es en bash ou sh, ou par le fichier ".bashrc" ou en créant un script shell dédié au lancement de ton programme
    Choisis parmis les fichiers cités celui qui te conviendra le mieux et rajoutes-y les lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/include/mysql-connector-c-6.0.2-linux-glibc2.3-x86-32bit/lib"
    export LD_LIBRARY_PATH
    Ou bien recopie ou crée un lien de libmysql.so.16 vers "/usr/lib"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 26
    Dernier message: 03/12/2009, 13h06
  2. Comment protéger un programme avec thread ?
    Par ouadie99 dans le forum C#
    Réponses: 9
    Dernier message: 04/04/2008, 10h41
  3. Comment apprendre a programmer avec l'API W32
    Par Claude URBAN dans le forum Windows
    Réponses: 8
    Dernier message: 22/01/2007, 23h40
  4. Réponses: 13
    Dernier message: 11/01/2007, 14h13
  5. Comment executer un programme avec un bouton
    Par STEPH69000 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 09/08/2006, 19h48

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