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

C Discussion :

API c/Mysql : erreur de compilation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 163
    Par défaut API c/Mysql : erreur de compilation
    Bonjour ,
    j'utilise le code suivant pour me connecter à une BD
    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
    49
    50
    51
    52
    53
    54
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <unistd.h> 
    #include </tmp/include/mysql.h> 
    #include <string.h>
    #define MY_SERVER_HOST "localhost"
    #define MY_SERVER_PORT 0
    #define MY_ACCOUNT "login"
    #define MY_PASS "password"
    #define MY_DB_NAME "test"
    #define MY_TABLE_NAME "test_tbl"
    #define MY_UX_SOCK NULL
    #define MY_CLIENT_FLAG 0
     
    int main(){
       MYSQL *mysql;
       MYSQL_RES *res;
       MYSQL_ROW row;
       char *query;
       unsigned int t, f;
     
       mysql=mysql_init(NULL);
       if (!mysql_real_connect(mysql,MY_SERVER_HOST,MY_ACCOUNT,MY_PASS,
            MY_DB_NAME,MY_SERVER_PORT,MY_UX_SOCK,MY_CLIENT_FLAG)) {
           printf( "Erreur de connexion : %s\n",mysql_error(mysql));
       } else {
          printf("Connexion etablie...\n");
     
          sprintf(query,"select * from %s\n", MY_TABLE_NAME);
          printf("Requete : %s", query);
     
          t=mysql_real_query(mysql, query, (unsigned int) strlen(query));
          if (t) {
             printf("Erreur dans la requete : %s\n", mysql_error(mysql));
          } else {
             if((res=mysql_use_result(mysql))) {
                printf("Resultat de la requete :\n");
                f=mysql_num_fields(res);
                while((row=mysql_fetch_row(res))) {
                  for(t=0;t<f;t++) {
                    printf("\t%s",row[t]);
                  }
                  printf("\n");
                }
                   mysql_free_result(res);
             }
             else {
               printf("Erreur de recuperation du resultat : %s\n", mysql_error(mysql));
             }
          }
       }
       mysql_close(mysql);
       exit(EXIT_SUCCESS);
    }
    il me donne l'erreur suivante

    /tmp/ccbP1cDh.o(.text+0x23): In function `main':
    projet.c: undefined reference to `mysql_init'
    /tmp/ccbP1cDh.o(.text+0x4b):projet.c: undefined reference to `mysql_real_connect'
    /tmp/ccbP1cDh.o(.text+0x5d):projet.c: undefined reference to `mysql_error'
    /tmp/ccbP1cDh.o(.text+0xd8):projet.c: undefined reference to `mysql_real_query'
    /tmp/ccbP1cDh.o(.text+0xef):projet.c: undefined reference to `mysql_error'
    /tmp/ccbP1cDh.o(.text+0x113):projet.c: undefined reference to `mysql_use_result'
    /tmp/ccbP1cDh.o(.text+0x13e):projet.c: undefined reference to `mysql_num_fields'
    /tmp/ccbP1cDh.o(.text+0x190):projet.c: undefined reference to `mysql_fetch_row'
    /tmp/ccbP1cDh.o(.text+0x1a7):projet.c: undefined reference to `mysql_free_result'
    /tmp/ccbP1cDh.o(.text+0x1b7):projet.c: undefined reference to `mysql_error'
    /tmp/ccbP1cDh.o(.text+0x1d6):projet.c: undefined reference to `mysql_close'
    collect2: ld a retourné 1 code d'état d'exécution

    est ce que c'est a cause du fichier mysql.h ,par ce que je l'est recupere aprés l'extraction d'un fichier d'installation de MySql vu que je l'avais pas sur la machine .
    merci

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu n'a pas ajouter la bibliotheque lors de ton link.

    Je ne connais pas la bibliotheque a rajouter par contre.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 163
    Par défaut
    c'est pas moi qui a ecrit le code ,je l'est recupere du net et normalement ils disent qu'il marche bien ,donc à mon avis ca va être un probléme de bilbliotheque ,mais je sais pas comment resoudre ça.

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Rhum rhum rhum.

    As tu lu mon message ou du moins l'a tu compris?

    Lors de la compilation et plus specialement la phase d'edition de liens, la linker ne trouve pas les fonctions en rapport avec mysql.

    Donc 2 solutions : Soit tu possedes le .c qui contient toutes les fonctions mysql et dans ce cas la tu le compile pour en faire un .o, et tu rajoutes ce .o lors de la compilation de projet.c

    Soit c'est sous forme de bibliotheque et a ce moment la tu rajoutes une option à ta ligne de compilation pour que le linker trouve les fonctions
    Un truc dans ce genre
    gcc projet.c -lmysql -o projet

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 163
    Par défaut
    ok j'avais pas compris .
    j'ai trouve un truc sue le net : gcc -I/usr/include/mysql -lmysqlclient projet.c -o projet
    mais tjrs à la compil il reconnait pas lmysqlclient.

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par jamalmoundir
    gcc -I/usr/include/mysql -lmysqlclient projet.c -o projet
    Il fallait lire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc projet.c -lmysqlclient -L/usr/include/mysql -o projet
    Cf. la documentation de gcc pour plus de details.

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Comme d'habitude, il faut ajouter la bibliotheque dans la liste vue par l'editeur de lien (les details dependent de ton compilateur).
    Je rappele que le fichier d'entete ne contient que les prototypes des fonctions utilisees, ainsi que les typedefs et macros eventuellement necessaires. Le compilateur a besoin de ces informations pour produire le fichier objet (.o ou .obj) correspondant au fichier source (.c) en cours de compilation.
    Ensuite, l'editeur de lien a besoin du code des fonctions appelees. Ce code se trouve dans la bibliotheque (dans ton cas, elle s'appelle certainement libmysql avec une extension .a, .so, .lib ou .dll selon ton systeme et le type de lien qui est fait [statique ou dynamique]).

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

Discussions similaires

  1. API MYQSL erreur de compilation
    Par thanks33 dans le forum Windows
    Réponses: 14
    Dernier message: 11/06/2009, 11h07
  2. Erreur de compilation API windows
    Par MarioNoFearS dans le forum Windows
    Réponses: 2
    Dernier message: 02/06/2007, 08h40
  3. JDBC et mysql Erreur lors de la compilation
    Par lerab51 dans le forum JDBC
    Réponses: 6
    Dernier message: 05/04/2007, 13h57
  4. Réponses: 6
    Dernier message: 28/03/2007, 19h40
  5. Api mysql avec Devc++, erreur de compilation
    Par Viiince dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 15/06/2004, 17h19

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