|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2009 Messages : 11 ![]() |
Bonjour à tous.
Je suis face un problème pour un projet qui devrait se dérouler en C++ Qt. Je désirerai donc compiler mon programme avec gcc de mingw. Je dois communiquer avec un appareil par l'intermédiaire d'un SDK fourni sous la forme d'une dll + des headers + des .lib pour l'inclusion. Ces librairies sont prévues à la base pour une utilisation avec le compilateur de VisualStudio. Le fournisseur m'indique qu'ils n'ont jamais eu de demande pour compiler avec MinGW. Cependant ils fournissent aussi leur SDK en version Linux. Ma problématique serait de faire accepter les librairies par gcc. J'inclus pour le moment les fichiers lib dans le projet Qt : LIBS += -L../librairies LIBS += -lNomLibrairie Je n'ai pas d'erreur mais je ne suis pas totalement sur que l'inclusion se fasse réellement. Mon projet ne comporte qu'une instance d'un objet de la librairie, mais j’obtiens le message d'erreur suivant lors de l'instanciation : erreur : undefined reference to `_imp___ZN15C_NomDeLaClasseC1Ev' A quoi est du ce type d'erreur ? un problème d'inclusion ? Faut il recompiler les librairies ? Il me semblait être tombé sur une FAQ ou une aide montrant une technique pour recompiler des .lib issus de VS pour GCC, mais je n'arrive pas à retrouver le lien. Je suis tombé sur DLLtool mais rien n'y fait. Désolé si j'ai des questions à la con, j'ai quelques lacunes en inclusions de librairies D'avance merci. |
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() Thomas DesaintjeanDéveloppeur informatique Inscription : juillet 2012 Messages : 6 ![]() |
Je ne sais pas si il est trop tard ou non, mais la dll que tu utilise as été compilée en C++ je pense.
Lorsque le compilateur passe par la, il fait une "décoration" des noms de fonction, pour bien distingué d'éventuels conflit entre deux fonctions du même nom. La décoration permet d'avoir des noms unique, en rajoutant des symboles et des lettres autour du nom original. Pour pouvoir appeler cette fonction, il faut soit forcer le compilateur a compiler en C (et non en C++) soit ajouter des mot clés avant le nom de ta fonction pour que le compilateur comprenne que cette fonction doit être compiler en C et non en C++ Personnellement j'ai crée une dll avec visual studio C++ 2010 express et j'ai fait : Code :
extern "C" __declspec (dllexport) TypeFonction __cdecl NomFonction(Argument1, Argument2, ..) J'espère que ça aidera quelqu'un a défaut du créateur du fil. MAJ : J'avais oublier que la dll c'est pas toi qui l'a faite .. Si tu n'a pas la possibilité de recompiler cette dll en rajoutant ces mots clés, la seule solution c'est de compiler avec le même compilateur que celui de la dll, et encore je suis pas certain que la décoration soit interprétée correctement. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com