problème de compilation

problème de compilation - C - Programmation

Marsh Posté le 18-07-2007 à 11:26:45    

Bonjour à tous,
 
j'ai un problème avec un programme C. Je suis sous Windows et j'utilise cygwin mais je n'arrive pas à compiler.
 
Voici le code :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "mysql.h"
  4. #include "mysql_com.h"
  5. #include "mysql_version.h"
  6. int main(int argc, char** argv) {
  7.    
  8.     MYSQL *mysql; /* pointeur vers notre gestionnaire de connexion */
  9.     char *query; /* requete SQL */
  10.     MYSQL_RES *res; /* pointeur vers un result-set */
  11.     MYSQL_ROW row; /* objet destine a accueillir une ligne d'un result-set */
  12.     MYSQL *res2;
  13.     //initialisation du gestionnaire de connexion
  14.     mysql_init(mysql);
  15.     //on établit la connexion (null si échoué)
  16.     //res2=mysql_real_connect(mysql,"localhost","root","root","mext",2187,NULL,0);
  17.     //printf("la connexion est à :%s",res2);
  18.    
  19.     printf("c'est bon" );
  20.    
  21.    
  22.     return (EXIT_SUCCESS);
  23. }


 
et voilà les commandes essayées dernièrement :
gcc -c connec.c
gcc -o connec.o libmysqlclient.a
 
et j'ai l'erreur :
/usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/../../../libcygwin.a<libcmain.o>:<.text+0xab>: référence indéfinie vers <<_WinMain@16>>
collect2 : ld a retourné 1 code d'état d'exécution
 
 
et il apparaît que le _WinMain@16 appartient à l'API C windows cependant il ne me semble pas que je l'utilise.
 
Pouvez vous m'aider?
 
Merci d'avance

Reply

Marsh Posté le 18-07-2007 à 11:26:45   

Reply

Marsh Posté le 19-07-2007 à 21:17:39    

Nookie_chan a écrit :

et voilà les commandes essayées dernièrement :
gcc -o connec.o libmysqlclient.a


gcc connec.o libmysqlclient.a -o connec
 
Et va lire la doc de gcc


Message édité par Sve@r le 19-07-2007 à 21:17:59

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-07-2007 à 09:07:20    

J'ai lu la doc de gcc mais j'ai pas trouvé ça dedans désolée.
 
J'ai essayé ta commande et ça me met une erreur que j'ai déjà eu avant :
 
connec.o:connec.c:<.text+0x25>: référence indéfinie vers <<_mysql_init>>
collect2 : ld a retourné 1 code d'état d'exécution
 
 
Je ne comprends pas pourquoi puisque je fais appel à mysql_init et non à _mysql_init
 
Pourriez-vous m'aider?

Reply

Marsh Posté le 17-08-2007 à 20:38:07    

pour produite un .o avec gcc, faut faire :
gcc -c toto.c -o toto.o
 
et ensuite :
gcc toto.o -o toto
 
Après, pour ton mysql_init, il se peut qu'il y a ait une macro dans un coin qui transforme ton mysql_init en _mysql_init. Pour finir, il faut aussi certainement linker à une lib

Reply

Marsh Posté le 17-08-2007 à 22:40:24    

Dumbledore a écrit :

pour produite un .o avec gcc, faut faire :
gcc -c toto.c -o toto.o


gcc -c toto.c suffit amplement
 

Dumbledore a écrit :

Pour finir, il faut aussi certainement linker à une lib


Ben oui => c'est ce qu'il tentait de faire avec libmysqlclient.a mais apparemment, il ne s'agit pas de la bonne librairie.
 
 
=> Nookie_chan, la compilation multi-sources avec librairies se fait en plusieurs étapes
1) il te faut générer les .o de chaque .c => gcc -c <le fichier.c> (à faire pour chaque source) => cela te génèrera autant de ".o" que de ".c" mais seule la syntaxe du source est vérifiée
2) créer l'exécutable en y rajoutant l'édition de liens entre les différents .o et vers les librairies qui vont bien => toutes les fonctions spécifiques aux librairies que tu appelles seront prises des librairies et intégrées dans ton exécutable =>  
gcc -o executable x.o y.o  z.o <...tous les autres .o...> lib1.a lib2.a lib3.a <...toutes les autres librairies...>
 
Bien entendu, pour cette dernière phase, il te faut 1) savoir quelle librairie utiliser et 2) l'avoir à disposition. Apparemment, libmysqlclient.a n'est pas la bonne puisqu'elle ne connait pas la fonction "mysql_init()"...


Message édité par Sve@r le 17-08-2007 à 22:41:15

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed