compilation sur gcc et sur vc++ - C++ - Programmation
Marsh Posté le 21-07-2005 à 11:54:59
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...
Marsh Posté le 21-07-2005 à 12:43:48
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...
Marsh Posté le 21-07-2005 à 14:21:05
ReplyMarsh Posté le 21-07-2005 à 18:52:31
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)
Marsh Posté le 22-07-2005 à 09:51:52
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.
Marsh Posté le 22-07-2005 à 11:14:18
daqCmd n'utilise pas que un .h il ya forcement un compilé qqpart dans un lib ou un a ...
Marsh Posté le 22-07-2005 à 11:30:52
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.
Marsh Posté le 22-07-2005 à 11:43:19
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 ?
Marsh Posté le 22-07-2005 à 11:46:58
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 : |
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
Marsh Posté le 22-07-2005 à 11:47:52
a part recompiler la chsoe non
bienvenue dans le monde des bibliotheques proprio
Marsh Posté le 22-07-2005 à 11:50:03
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 |
Pour le moment, je cherche juste à compilé le programme, et je n'inclus en effet aucun .o
Citation : |
Mais s'il y a un probleme de librairi, je penserai plus pour ce probleme: pourquoi faudrait-il que j'inclut le .o ?
Marsh Posté le 22-07-2005 à 12:11:36
faut utiliser g++ si tu compiles du C++
Marsh Posté le 22-07-2005 à 12:12:59
ta fonction daqCmd, elle est définie dans quel fichier ? (et me reponds pas un .h, s'il te plait )
Marsh Posté le 22-07-2005 à 12:24:56
Citation : faut utiliser g++ si tu compiles du C++ |
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 ) |
La fonction daqCmd, si j'ai bien compris, est definie dans un fichier PCDAQ.LIB.
Marsh Posté le 24-07-2005 à 09:24:35
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.
Marsh Posté le 24-07-2005 à 10:43:19
Joel F a écrit : a part recompiler la chsoe non |
ben si. pexports, reimp et dlltool, c'est pas fait pour les chiens
Marsh Posté le 24-07-2005 à 10:53:39
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
Marsh Posté le 24-07-2005 à 11:03:05
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 |
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?" ).
Marsh Posté le 24-07-2005 à 11:08:00
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.)
Marsh Posté le 24-07-2005 à 11:13:25
bah le reste de l'ABI, y bien d'autres choses à part le mangling qui diffère ?
Marsh Posté le 25-07-2005 à 06:44:15
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
|
Marsh Posté le 25-07-2005 à 10:15:11
Merci beaucoup pout toute vos reponse qui m'ont permis de resoudre mon probleme et d'en aprendre beaucoup sur les .LIB et .DLL
Marsh Posté le 21-07-2005 à 11:33:49
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:
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