Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2068 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  compilation sur gcc et sur vc++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

compilation sur gcc et sur vc++

n°1155737
blaise_lap​orte
Posté le 21-07-2005 à 11:33:49  profilanswer
 

Voila, j'ai un probleme de compilation.
 
J'ai un programme que je peux compiler sans probleme avec visual c++, mais avec gcc, il me renvoie des erreurs:
 

Citation :


In file included from Ad125ex.cpp:5:
pcdaq.h:186:20: warning: no newline at end of file
C:\DOCUME~1\blaporte.CST\LOCALS~1\Temp/ccw1baaa.o(.text+0x2c):Ad125ex.cpp: undef
ined reference to `daqCmd@20'
C:\DOCUME~1\blaporte.CST\LOCALS~1\Temp/ccw1baaa.o(.text+0x62):Ad125ex.cpp: undef
ined reference to `daqCmd@20'
C:\DOCUME~1\blaporte.CST\LOCALS~1\Temp/ccw1baaa.o(.text+0x98):Ad125ex.cpp: undef
ined reference to `daqCmd@20'
C:\DOCUME~1\blaporte.CST\LOCALS~1\Temp/ccw1baaa.o(.text+0xcf):Ad125ex.cpp: undef
ined reference to `daqCmd@20'
C:\DOCUME~1\blaporte.CST\LOCALS~1\Temp/ccw1baaa.o(.text+0x3f9):Ad125ex.cpp: unde
fined reference to `daqCmd@20'
C:\DOCUME~1\blaporte.CST\LOCALS~1\Temp/ccw1baaa.o(.text+0x4db):Ad125ex.cpp: more
 undefined references to `daqCmd@20' follow
collect2: ld returned 1 exit status


 
Et je comprend pas pourquoi je peux compiler avec l'un mais pas avec l'autre.
 
Merci

mood
Publicité
Posté le 21-07-2005 à 11:33:49  profilanswer
 

n°1155801
_p1c0_
Posté le 21-07-2005 à 11:54:59  profilanswer
 

Je suis loin d'être un pro de gcc mais on dirait qu'il te manque des librairies quand tu fais ton édition de lien... Faudrait comparer les options du compilateur dans Visual C++ avec celle que tu passes à gcc...


Message édité par _p1c0_ le 21-07-2005 à 11:55:38

---------------
-_- http://www.scienceshopping.com -_-
n°1155920
blaise_lap​orte
Posté le 21-07-2005 à 12:43:48  profilanswer
 

L'ennui étant que je n'y connais rien sur vc++ et que je suis donc incapable de savoir à quoi corresponde les différentes option...

n°1155939
Taz
bisounours-codeur
Posté le 21-07-2005 à 13:01:13  profilanswer
 

déjà compile en -Wall

n°1156027
blastman
just me !
Posté le 21-07-2005 à 14:21:05  profilanswer
 

ta un problème de référence je crois :D


---------------
http://www.blastmanu.info
n°1156252
blaise_lap​orte
Posté le 21-07-2005 à 16:17:49  profilanswer
 

Qu'appelles tu "probleme de reference"?  
 

n°1156436
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-07-2005 à 18:52:31  profilanswer
 

il te manque la librairie que tu dois lier statiquement à ton projet, et qui contient la fonction daqCmd() (ou un truc approchant)
attention : sous VC++ et sous GCC, le format des librairies est différent (.lib pour VC++, lib*.a pour GCC)


---------------
J'ai un string dans l'array (Paris Hilton)
n°1156806
blaise_lap​orte
Posté le 22-07-2005 à 09:51:52  profilanswer
 

En theoris, dans ce programme, je n'ai besoin d'aucune librairi suplémentaire.
daqCmd() utilise un .h, mais pas de librairie.  
 
Je n'arrive pas à comprendre comment savoir qu'elle librairi vc++ utilise qui n'est pas disponible  à gcc et pourquoi il utiliserai cette librairie étant donné que je ne le lui demande pas.


Message édité par blaise_laporte le 22-07-2005 à 10:53:34
n°1156941
Joel F
Real men use unique_ptr
Posté le 22-07-2005 à 11:14:18  profilanswer
 

daqCmd n'utilise pas que un .h il ya  forcement un compilé qqpart dans un lib ou un a ...

n°1156974
nathan_g
Posté le 22-07-2005 à 11:30:52  profilanswer
 

J'ai l'impressison que tu es confronté à l'absence de "transparence" de Visual C++, ce qui fait que, sans ouvrir le projet et chercher dedans, tu ne sais pas quelle librarie sont appelées par défaut et liée lors de l'éditiond de liens.
Avec gcc, tu dois avoir des libraries équivalentes encore faut-il savoir desquelles il s'agit et les trouver !
 
Quel " .h " daqCmd utilise-t-il ? Ce sera une indication de la librairie à chercher.

mood
Publicité
Posté le 22-07-2005 à 11:30:52  profilanswer
 

n°1156983
chrisbk
-
Posté le 22-07-2005 à 11:43:19  profilanswer
 

moi je crois surtotu que sa ligne de commande/make pour gcc est foireuse et n'inclue pas le .o qui va bien
 
tu peux nous poster ca ?

n°1156986
blaise_lap​orte
Posté le 22-07-2005 à 11:46:58  profilanswer
 

Citation :

J'ai l'impressison que tu es confronté à l'absence de "transparence" de Visual C++, ce qui fait que, sans ouvrir le projet et chercher dedans, tu ne sais pas quelle librarie sont appelées par défaut et liée lors de l'éditiond de liens.


 
J'ai en effet un véritable probleme avec vc++...
 

Citation :


Quel " .h " daqCmd utilise-t-il ? Ce sera une indication de la librairie à chercher.


 
En faite, j'utilise un .h fournit par un fabriquant de carte d'acquisition pour piloter sa carte. En fouillant dans tout les fichier fournit, j'ai finis par trouver le .LIB!
 
Mais d'aprés ce que j'ai compris, ce .LIB n'est pas utilisable avec gcc. y a t'il un moyen pour le tranformé en librairi compatible avec gcc?
 
Merci

n°1156988
Joel F
Real men use unique_ptr
Posté le 22-07-2005 à 11:47:52  profilanswer
 

a part recompiler la chsoe non :o
bienvenue dans le monde des bibliotheques proprio :o

n°1156990
blaise_lap​orte
Posté le 22-07-2005 à 11:50:03  profilanswer
 

chrisbk a écrit :

moi je crois surtotu que sa ligne de commande/make pour gcc est foireuse et n'inclue pas le .o qui va bien
 
tu peux nous poster ca ?


 
Pour le moment, je cherche juste à compilé le programme, et je n'inclus en effet aucun .o
 

Citation :


gcc Ad125ex.cpp


 
Mais s'il y a un probleme de librairi, je penserai plus pour ce probleme: pourquoi faudrait-il que j'inclut le .o ?    :??:

n°1157029
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-07-2005 à 12:11:36  profilanswer
 

faut utiliser g++ si tu compiles du C++ :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°1157032
chrisbk
-
Posté le 22-07-2005 à 12:12:59  profilanswer
 

ta fonction daqCmd, elle est définie dans quel fichier ? (et me reponds pas un .h, s'il te plait [:petrus75])

n°1157055
blaise_lap​orte
Posté le 22-07-2005 à 12:24:56  profilanswer
 

Citation :

faut utiliser g++ si tu compiles du C++ :o


 
Je prefere en effet utilisé gcc, mais visiblement, certaine fonction de mon pragramme qui commmande la carte d'acquisition ne sont utilisabla que sous vc++.
 

Citation :

ta fonction daqCmd, elle est définie dans quel fichier ? (et me reponds pas un .h, s'il te plait [:petrus75])


 
La fonction daqCmd, si j'ai bien compris, est definie dans un fichier PCDAQ.LIB.
 

n°1158212
el muchach​o
Comfortably Numb
Posté le 24-07-2005 à 09:24:35  profilanswer
 

Juste un truc au passage, si tu dois ecrire un truc portable, il vaut mieux ecrire ton code pour g++ -Wall et compiler ensuite avec vc++ que l'inverse, parce que g++ est plus strict. Tu auras moins de pb de cette maniere, et un code qui passe impec sous g++ a de fortes chances de compiler impec sous vc++, le contraire n'etant pas le cas.
 
Par ex, le warning que tu as
"pcdaq.h:186:20: warning: no newline at end of file "
 
c'est nouveau et c'est chiant, mais ca ne m'etonnerait pas que ce soit requis par la norme, et ca permet d'uniformiser le code.
 
Quand a ton pb de lib proprio, soit le fournisseur de la carte a une lib pour gcc (attention a la version avec laquelle ca a ete compile), soit tu peux laisser tomber.

n°1158214
Taz
bisounours-codeur
Posté le 24-07-2005 à 09:27:29  profilanswer
 

c'est requis. Ça vient du C.

n°1158234
Joel F
Real men use unique_ptr
Posté le 24-07-2005 à 10:37:27  profilanswer
 

c'est pas nouveau le No newlien at end of line [:pingouino]

n°1158238
docmaboul
Posté le 24-07-2005 à 10:43:19  profilanswer
 

Joel F a écrit :

a part recompiler la chsoe non :o
bienvenue dans le monde des bibliotheques proprio :o


 
ben si. pexports, reimp et dlltool, c'est pas fait pour les chiens :o

n°1158239
Joel F
Real men use unique_ptr
Posté le 24-07-2005 à 10:53:39  profilanswer
 

han han ... tu me dis comment ca marche alors je vois comment tu peut reprendre des binaires compilées VC6 pour en faire un .a gcc [:pingouino]

n°1158243
docmaboul
Posté le 24-07-2005 à 11:03:05  profilanswer
 

Joel F a écrit :

han han ... tu me dis comment ca marche alors je vois comment tu peut reprendre des binaires compilées VC6 pour en faire un .a gcc [:pingouino]


 
ben, il faut lui donner les symboles qu'on veut avoir dans son .a et la dll à mouliner pour trouver les symboles en question (je sens venir le "oui mais si tu as une lib statique?" ).

n°1158245
Taz
bisounours-codeur
Posté le 24-07-2005 à 11:04:22  profilanswer
 

mais le reste de l'ABI est compatible ?

n°1158247
docmaboul
Posté le 24-07-2005 à 11:08:00  profilanswer
 

Taz a écrit :

mais le reste de l'ABI est compatible ?


 
le reste de quoi compatible avec quoi? (tout ce que font les outils de ce genre, c'est générer des .a que peux comprendre gcc pour se bouffer une dll. Le code binaire, ils ne le changent pas.)

n°1158251
Taz
bisounours-codeur
Posté le 24-07-2005 à 11:13:25  profilanswer
 

bah le reste de l'ABI, y bien d'autres choses à part le mangling qui diffère ?

n°1158266
Joel F
Real men use unique_ptr
Posté le 24-07-2005 à 12:04:38  profilanswer
 

l'ABI vc6 est certainement pas compatible gcc :|

n°1158656
docmaboul
Posté le 25-07-2005 à 06:44:15  profilanswer
 

Taz a écrit :

bah le reste de l'ABI, y bien d'autres choses à part le mangling qui diffère ?


 
Ben, à ma connaissance, krosoft n'a jamais publié d'ABI C ou C++ pour sa plateforme. Il y a bien le PE mais c'est plutôt léger. A mon avis, les mecs de MinGW ont dû décompiler des binaires histoire d'être sûrs d'être compatibles (je pense en particulier au niveau des conventions d'appels où, si ma mémoire est bonne, msvc utilise par exemple en C++ ecx pour passer l'adresse de l'objet). Mais bref, au final, c'est compatible au niveau des binaires exécutables, pas au niveau des binaires objets, et dans quelle mesure, je n'en sais rien.
Enfin, pour le sujet du topic, il suffit de lire la doc:
 
http://www.mingw.org/mingwfaq.shtml#faq-msvcdll
 


How can an MSVC program call a MinGW DLL, and vice versa?
Assume we have a testdll.h, testdll.c, and testmain.c. In the first case, we will compile testdll.c with MinGW, and let the MSVC-compiled testmain call it. You should use
 
gcc -shared -o testdll.dll testdll.c \
    -Wl,--output-def,testdll.def,--out-implib,libtestdll.a  
to produce the DLL and DEF files. MSVC cannot use the MinGW library, but since you have already the DEF file you may easily produce one by the Microsoft LIB tool:  
lib /machine:i386 /def:testdll.def  
Once you have testdll.lib, it is trivial to produce the executable with MSVC:
 
cl testmain.c testdll.lib  
Now for MinGW programs calling an MSVC DLL. We have two methods. One way is to specify the LIB files directly on the command line after the main program. For example, after
 
cl /LD testdll.c  
use  
gcc -o testmain testmain.c testdll.lib  
The other way is to produce the .a files for GCC. For __cdecl functions (in most cases), it is simple: you only need to apply the reimp tool from Anders Norlander (since his web site is no longer available, you may choose to download here a version enhanced by Jose Fonseca):
 
reimp testdll.lib
gcc -o testmain testmain.c -L. -ltestdll  
However, for __stdcall functions, the above method does not work. For MSVC will prefix an underscore to __stdcall functions while MinGW will not. The right way is to produce the DEF file using the pexports tool included in the mingw-utils package and filter off the first underscore by sed:
 
pexports testdll.dll | sed "s/^_//" > testdll.def  
Then, when using dlltool to produce the import library, add `-U' to the command line:  
dlltool -U -d testdll.def -l libtestdll.a  
And now, you can proceed in the usual way:  
gcc -o testmain testmain.c -L. -ltestdll  
Hooray, we got it.


Message édité par docmaboul le 25-07-2005 à 06:49:40
n°1158756
blaise_lap​orte
Posté le 25-07-2005 à 10:15:11  profilanswer
 

Merci beaucoup pout toute vos reponse qui m'ont permis de resoudre mon probleme et d'en aprendre beaucoup sur les .LIB et .DLL
 
[:athome]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  compilation sur gcc et sur vc++

 

Sujets relatifs
Compilation glade-gtkmm/dev-cppCompilation separee
Problème lors de la compilationProjet de C++ et Librarie MYSQL++ Compilation OK / Mais Linkage pas OK
Problème de compilation de programmes de tri avec portlandmatlab compilation
Problème de compilation avec la librairie wxWidgetScript unix pour compilation soft en java
Aide SDL : Problème de clic de souris... (titre modifié)J'y comprends plus rien avec la compilation
Plus de sujets relatifs à : compilation sur gcc et sur vc++


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)