debutant : compile sous borland mais pas gcc

debutant : compile sous borland mais pas gcc - C++ - Programmation

Marsh Posté le 29-04-2003 à 08:51:56    

j ai le code suivant qui compuile sous borlan mais pas gcc ..., il y a donc surment une erreur qqpart : gcc me retourne une erreur sur ld ...
merci davance
 

Code :
  1. #include <iostream.h>
  2. #include <string.h>
  3. struct  Scatfic {
  4. char name[30];
  5. char date[8];
  6. int indice;
  7. }Catfic[100];
  8. int Taballoc[1000];
  9. char name[30];
  10. bool Delfile( char name[30], Scatfic Catfic[100], int Taballoc[1000],  int Tetelibre) {
  11. int i=0;
  12.    
  13.   for(i=0 ; i<101 ; i++) {
  14.  if ( strcmp(Catfic[i].name,name) )
  15.          cout<<"test"<<endl;
  16.   };
  17.  
  18.   return 0;
  19. }


Message édité par GUG le 29-04-2003 à 08:54:08
Reply

Marsh Posté le 29-04-2003 à 08:51:56   

Reply

Marsh Posté le 29-04-2003 à 08:56:15    

ce quoi ce 101 dans la boucle ? Pis c koi ce souc tout court [:joce]

Reply

Marsh Posté le 29-04-2003 à 08:57:33    

en fait c peut etre cygwin qui foire :  
/usr/lib/gcc-lib/i686-pc-cygwin/3.2/../../../libcygwin.a(licmain.o)(.text+0x7c):undefined reference to '_WinMain@16'
collect2: ld returned 1 exit status

Reply

Marsh Posté le 29-04-2003 à 08:58:46    

chrisbk a écrit :

ce quoi ce 101 dans la boucle ? Pis c koi ce souc tout court [:joce]


euh bah cad :D euh (prof de merde !!)

Reply

Marsh Posté le 29-04-2003 à 08:59:19    

[:rofl]
 
Ah ok je cprends mieux la :D
 
Bon, ben regarde dans les options de cygwin si t'as un truc pour faire un exe em mode "console"

Reply

Marsh Posté le 29-04-2003 à 09:03:50    

GUG a écrit :

j ai le code suivant qui compuile sous borlan mais pas gcc ..., il y a donc surment une erreur qqpart : gcc me retourne une erreur sur ld ...
merci davance
 

Code :
  1. #include <iostream.h>
  2. #include <string.h>
  3. struct  Scatfic {
  4. char name[30];
  5. char date[8];
  6. int indice;
  7. }Catfic[100];
  8. int Taballoc[1000];
  9. char name[30];
  10. bool Delfile( char name[30], Scatfic Catfic[100], int Taballoc[1000],  int Tetelibre) {
  11. int i=0;
  12.    
  13.   for(i=0 ; i<101 ; i++) {
  14.  if ( strcmp(Catfic[i].name,name) )
  15.          cout<<"test"<<endl;
  16.   };
  17.  
  18.   return 0;
  19. }




Je vois un ou deux trucs bizarres:
1)char name[30] et int Taballoc[1000] sont définis 2 fois (globalement et en tant que paramètre de ta fonction).
2) Même chose pour Catfic[100], qui devrait également plutot apparaitre ainsi dans l'entete de la fonction (ne pas oublier le struct):

Code :
  1. bool Delfile( char name[30], struct Scatfic Catfic[100], int Taballoc[1000],  int Tetelibre)


 
Tu pourrais nous donner le reste (s'il y a autre chose)?
Je ne vois rien qui explique une erreur de link ici...Donne aussi ta ligne de commande pour compiler (ou ton makefile).

Reply

Marsh Posté le 29-04-2003 à 09:05:46    

il n y a rien d autre, pour compiler :  
g++.exe lefichier.cpp ;)  
bon je v arranger tout ca pour voir :D

Reply

Marsh Posté le 29-04-2003 à 09:05:50    

Si cela constitue l'intégralité de ton prog, il beugle p-e parce-qu'il n'y a pas de main, tout simplement...

Reply

Marsh Posté le 29-04-2003 à 09:07:21    

GUG a écrit :

il n y a rien d autre, pour compiler :  
g++.exe lefichier.cpp ;)  
bon je v arranger tout ca pour voir :D  


voir ma réponse précédente, ca doit expliquer le pb de link.
Si tu veux faire un executable il te faut un main...

Reply

Marsh Posté le 29-04-2003 à 09:08:39    

GUG a écrit :

j ai le code suivant qui compuile sous borlan mais pas gcc ..., il y a donc surment une erreur qqpart : gcc me retourne une erreur sur ld ...
merci davance
 

Code :
  1. #include <iostream.h>
  2. #include <string.h>
  3. struct  Scatfic {
  4. char name[30];
  5. char date[8];
  6. int indice;
  7. }Catfic[100];
  8. int Taballoc[1000];
  9. char name[30];
  10. bool Delfile(name,Catfic[100],Taballoc[1000],Tetelibre) {
  11. int i=0;
  12.    
  13.   for(i=0 ; i<100 ; i++) {
  14.  if ( strcmp(Catfic[i].name,name) )
  15.          cout<<"test"<<endl;
  16.   };
  17.  
  18.   return 0;
  19. }




Message édité par GUG le 29-04-2003 à 09:15:59
Reply

Marsh Posté le 29-04-2003 à 09:08:39   

Reply

Marsh Posté le 29-04-2003 à 09:12:03    

skeye a écrit :


voir ma réponse précédente, ca doit expliquer le pb de link.
Si tu veux faire un executable il te faut un main...


un WinMain precisemment, donc appli win32
C pour ca que je lui demande de chercher pour une option "mode console" histoire qu'il puisse continuer a faire du main() standart

Reply

Marsh Posté le 29-04-2003 à 09:16:50    

apres modif voila ce que j ai fait : et ca compile :  
 

Code :
  1. #include <iostream.h>
  2. #include <string.h>
  3. struct  Scatfic {
  4. char name[30];
  5. char date[8];
  6. int indice;
  7. }Catfic[100];
  8. int Taballoc[1000];
  9. bool Delfile(char name[30] ,int &Tetelibre) {
  10. int i=0;
  11.    
  12.   for(i=0 ; i<100 ; i++) {
  13.  if ( strcmp(Catfic[i].name,name) )
  14.          cout<<"test"<<endl;
  15.   };
  16. // strcpy(Catfic[i].name,"¤" );
  17.  
  18. return 0;
  19. }
  20. int main(void) {
  21. return 0;
  22. }

Reply

Marsh Posté le 29-04-2003 à 09:17:10    

chrisbk a écrit :


un WinMain precisemment, donc appli win32
C pour ca que je lui demande de chercher pour une option "mode console" histoire qu'il puisse continuer a faire du main() standart


à priori il compile avec gcc, donc un bon vieux main devrait suffire, non?
en tout cas j'ai jamais utilisé de winmain avec gcc/cygwin!

Reply

Marsh Posté le 29-04-2003 à 09:17:35    

GUG a écrit :

apres modif voila ce que j ai fait : et ca compile :  
 

Code :
  1. int main(void) {
  2. return 0;
  3. }




et je suis sur que ton exe est super utile  :pt1cable:

Reply

Marsh Posté le 29-04-2003 à 09:19:08    

skeye a écrit :


à priori il compile avec gcc, donc un bon vieux main devrait suffire, non?
en tout cas j'ai jamais utilisé de winmain avec gcc/cygwin!


ben heuh :
 

Citation :

/usr/lib/gcc-lib/i686-pc-cygwin/3.2/../../../libcygwin.a(licmain.o)(.text+0x7c):undefined reference to '_WinMain@16'
collect2: ld returned 1 exit status


 
Bon, vu qu'y avait ni main ni WinMain..... :D

Reply

Marsh Posté le 29-04-2003 à 09:21:23    

GUG a écrit :

apres modif voila ce que j ai fait : et ca compile :  
 

Code :
  1. #include <iostream.h>
  2. #include <string.h>
  3. struct  Scatfic {
  4. char name[30];
  5. char date[8];
  6. int indice;
  7. }Catfic[100];
  8. int Taballoc[1000];
  9. bool Delfile(char name[30] ,int &Tetelibre) {
  10. int i=0;
  11.    
  12.   for(i=0 ; i<100 ; i++) {
  13.  if ( strcmp(Catfic[i].name,name) )
  14.          cout<<"test"<<endl;
  15.   };
  16. // strcpy(Catfic[i].name,"¤" );
  17.  
  18. return 0;
  19. }
  20. int main(void) {
  21. return 0;
  22. }




 [:sunn]  
Il ne te reste plus qu'à appeler ta fonction dans le main, histoire de faire quelquechose...
Je te conseillerais aussi d'éviter les variables globales...
J'aurais plutot vu un truc de ce genre:

Code :
  1. #include <iostream.h>
  2. #include <string.h>
  3. struct  Scatfic {
  4.   char name[30];
  5.   char date[8];
  6.   int indice;
  7. };
  8. bool Delfile(char name[30],struct Scatfic Catfic[100], int Taballoc[1000], int Tetelibre) {
  9.   int i=0;
  10.   for(i=0 ; i<100 ; i++) {
  11.     if ( strcmp(Catfic[i].name,name) )
  12.       cout<<"test"<<endl;
  13.   };
  14.   return 0;
  15. }
  16. int
  17. main(int argc, char* argv[])
  18. {
  19.   char ptitnom[30]="fichier";
  20.   struct Scatfic cat[100];
  21.   int monbotablohohoho[1000];
  22.   int jesuilibredanmatete=0;
  23.   bool camarche = Delfile(ptitnom, cat, monbotablohohoho, jesuilibredanmatete);
  24.   if(camarche)
  25.     cout<<"ouaiiiiiiiiiiiiiiiiiiiiiis"<<endl;
  26.   else
  27.     cout<<"zuteuhhhhhhhhhhhhhhhhhhhhh"<<endl;
  28.   return 1;
  29. }


Message édité par skeye le 29-04-2003 à 09:28:24
Reply

Marsh Posté le 29-04-2003 à 09:25:43    

chrisbk a écrit :


ben heuh :
 

Citation :

/usr/lib/gcc-lib/i686-pc-cygwin/3.2/../../../libcygwin.a(licmain.o)(.text+0x7c):undefined reference to '_WinMain@16'
collect2: ld returned 1 exit status


 
Bon, vu qu'y avait ni main ni WinMain..... :D


pb au link...Je suppose que c'est du au fait que cygwin est un "faux" bash pour windows (au final tu fais du bash dans une console ms-dos classique...). Le gcc filé avec doit avoir un fonctionnement particulier afin d'assurer le fonctionnement sous windows de façon transparente pour l'utilisateur... :??:


Message édité par skeye le 29-04-2003 à 09:26:11
Reply

Marsh Posté le 29-04-2003 à 09:26:22    

merci a tous :)  :jap:  
je vais voir ca mais bon les variables globales c moins chiant a utiliser :D

Reply

Marsh Posté le 29-04-2003 à 09:27:27    

GUG a écrit :

merci a tous :)  :jap:  
je vais voir ca mais bon les variables globales c moins chiant a utiliser :D  


C'est aussi une des meilleures façons de faire des conneries sans s'en rendre compte...:D

Reply

Marsh Posté le 29-04-2003 à 09:27:34    

skeye a écrit :


pb au link...Je suppose que c'est du au fait que cygwin est un "faux" bash pour windows (au final tu fais du bash dans une console ms-dos classique...). Le gcc filé avec doit avoir un fonctionnement particulier afin d'assurer le fonctionnement sous windows de façon transparente pour l'utilisateur... :??:


 
heuh en fait, je vois pas trop ce que tu veux dire

Reply

Marsh Posté le 29-04-2003 à 09:33:31    

chrisbk a écrit :


 
heuh en fait, je vois pas trop ce que tu veux dire


Ben euh tout ce que je voulais dire c'est que les librairies utilisées par le gcc de cygwin sont probablement != des librairies classiques de gcc sous linux par ex...
La référence à un "WinMain" qui apparaissait dans son erreur de link venait probablement du fonctionnement interne de son compilateur, et ne voulait pas dire que ce dernier attendait de la part de l'utilisateur l'utilisation d'une syntaxe inhabituelle...

Reply

Marsh Posté le 29-04-2003 à 09:34:55    

?
 
WinMain est le point d'entree stdart pour une appli Win32  
pe que ne trouvant pas de main() il a tenter de voir si y'avait un WinMain et vu que non => echec ?

Reply

Marsh Posté le 29-04-2003 à 09:38:48    

chrisbk a écrit :

?
 
WinMain est le point d'entree stdart pour une appli Win32  
pe que ne trouvant pas de main() il a tenter de voir si y'avait un WinMain et vu que non => echec ?


Moué...pas convaincu...
On demande un expert de gcc/cygwin!
Je pense plutôt que lors de la compil cette version précise de cygwin convertit le main classique en winmain de façon transparente pour l'utilisateur...mais bon tant qu'on n'a pas de preuves...
Tiens il faudrait que GUG essaie de remplacer main() par WinMain() dans son code, pour voir...:D

Reply

Marsh Posté le 29-04-2003 à 09:42:23    

skeye a écrit :


Moué...pas convaincu...
On demande un expert de gcc/cygwin!
Je pense plutôt que lors de la compil cette version précise de cygwin convertit le main classique en winmain de façon transparente pour l'utilisateur...mais bon tant qu'on n'a pas de preuves...
Tiens il faudrait que GUG essaie de remplacer main() par WinMain() dans son code, pour voir...:D


 
mouais tiens, gug met ca pour voir a la place de ton int main() :
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
 

Reply

Marsh Posté le 29-04-2003 à 09:48:05    

chrisbk a écrit :


 
mouais tiens, gug met ca pour voir a la place de ton int main() :
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
 
 


En tout cas djgpp comprend rien si je fais ça...
:whistle:
 
[edit]
D'ailleurs ca m'étonnerait que gcc connaisse tous ces types de données farfelus...:D


Message édité par skeye le 29-04-2003 à 09:49:05
Reply

Marsh Posté le 29-04-2003 à 09:49:21    

skeye a écrit :


En tout cas djgpp comprend rien si je fais ça...
:whistle:
 
[edit]
D'ailleurs ca m'étonnerait que gcc connaisse tous ces types de données farfelus...:D


 
#include <windows.h> ?

Reply

Marsh Posté le 29-04-2003 à 09:57:03    

chrisbk a écrit :


 
#include <windows.h> ?


tjrs pas chez moi...et ce genre de trucs sur un compilo venu du monde unix/linux c'est un coup à se faire taper...:lol:

Reply

Marsh Posté le 29-04-2003 à 09:59:40    

skeye a écrit :


tjrs pas chez moi...et ce genre de trucs sur un compilo venu du monde unix/linux c'est un coup à se faire taper...:lol:


 
c sur....mais dans ce cas pkoi le compilo parle de WinMain hein ? :O :D

Reply

Marsh Posté le 29-04-2003 à 10:01:24    

chrisbk a écrit :


 
c sur....mais dans ce cas pkoi le compilo parle de WinMain hein ? :O :D


ben euh...pask'il a pas le choix pour que ca marche sous win?:??:
Aucune idée en fait...!

Reply

Marsh Posté le 29-04-2003 à 11:02:14    

bon bah merci les gars j ai bien avence :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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