11
votes

Qt / mingw32 erreurs de référence non définies ... Impossible de lier un .lib

Je suis nouveau à qt et avoir une erreur que je suis incapable de réparer.

J'ai une bouquet de fichiers de bibliothèque statique (VS2005) ( .lib ). Et je teste si elles fonctionnent bien avec QT. J'ai donc pris la bibliothèque la plus simple que j'ai. (Appelé messagebuffer ).

donc j'ai ajouté messagebuffer.h au main.cpp et ajouté l'emplacement de ces fichiers dans le includepath du .pro .

Jusque-là, tout semble bien, je peux utiliser la classe et QT IDE montrer toute la méthode et tout . Donc, pour moi, il semble que cela ait trouvé le fichier .h.

maintenant j'ai ajouté le MessageBuffer.lib (VS2005 / Builée de débogage) dans le .pro Comme ceci: xxx

J'ai également essayé ce qui suit: xxx

voici le contenu de mon .pro fichier: xxx

Ils me donnent tous les mêmes erreurs: (et je reçois la même chose même si je n'inclut pas le .lib ) xxx

peut-il aider s'il vous plaît?


2 commentaires

Pourriez-vous poster le fichier PRO que vous utilisez?


Il suffit d'ajouter le contenu du fichier Pro dans le message d'origine.


3 Réponses :


0
votes

Je suppose que vous avez utilisé la bibliothèque MessageBuffer dans une autre application avec des problèmes. L'erreur semble que cela ne puisse pas trouver la bibliothèque ou la classe MessageBuffer n'est pas exportée.

Avez-vous essayé de mettre -l à l'avant de la bibliothèque dans le fichier PRO? P>

win32:LIBS += -lE:/SharedLibrary/lib/MessageBufferd.lib


7 commentaires

d est le nom réel, d est ajouté pour la version de débogage de la .lib.


@XCIMO a du sens ... voulait juste vérifier


Je ne sais pas si la classe MessageBuffer est exportée. Je n'ai pas de mot clé "exportation" dans la classe MessageBuffer, car j'ai pu utiliser cette bibliothèque dans de nombreux autres projets Visual Studio C ++. Une bibliothèque statique a-t-elle besoin d'une exportation? Ou peut-être que c'est quelque chose qui a besoin de mingw? Merci pour ton aide.


Pour être honnête, je ne sais pas si cela en a besoin ... mais l'erreur semble impliquer qu'elles ne peuvent pas être trouvées.


Pensez-vous que cela ne trouve pas le .h ou le .lib?


Essayez d'utiliser la commande "nm" fourni avec Mingw pour voir ce qui est exporté par votre lib.


Si vous ne l'avez pas encore essayé, cliquez sur A -L à l'avant de la bibliothèque dans le fichier Pro



5
votes

basé sur la question Utilisez des bibliothèques compilées avec Visual Studio dans une application compilée par G ++ (Mingw) et le Forum MSDN POST Je ne peux pas mélanger VC & GCC Il n'apparaît pas que vous pouvez lier une application GCC avec des bibliothèques compilées Visual C ++.

La solution serait de tout recompiler avec le même compilateur.


2 commentaires

C'est en fait ce que j'allais poster, j'ai trouvé ceci: ces bibliothèques, telles que de nombreux autres packages de développement de Windows précompilés tels que la bibliothèque client MySQL, ont été compilés avec MS Visual C ++ (MSVC). MSVC et Mingw, nous avons découvert, utilisez différentes conventions de dénomination pour les fonctions STDCALL. MSVC les exporte comme _name @ ordinal, mais MINGW les exporte comme nom. En conséquence, la construction MINGW a échoué avec des erreurs de liaison «Indiffines définies» lors de l'appel des fonctions STDCALL exportées depuis la bibliothèque MSVC.


Veuillez consulter ici les solutions: blog.outofhanwell .COM / 2006/05/01 / ...



4
votes

La FAQ MINGW discute de ce problème et offre une solution:

  1. Créez un fichier de définition à l'aide de fichiers RIMP (pour les fichiers LIB) ou PEXPORTS (pour les fichiers DLL).
  2. Retirez les préfixes de soulignement des fonctions STDCALL.
  3. Utilisez DLLTool pour convertir la bibliothèque MSVC en une bibliothèque MingW avec la nouvelle définition.

    cela n'a pas fonctionné. Nous avons finalement supprimé les ordonnances des noms de fonction, ce qui le faisait compiler. Mais le programme ne serait pas exécuté car il ne pouvait pas trouver les fonctions liées dans la DLL. Enfin, après consultation de la documentation MSDN pour les fichiers de définition, nous avons modifié les instructions de construction:

    1. créer un fichier de définition à l'aide de sol.
    2. pour chaque fonction STDCALL (formatée comme nom @ Nom @ ordinal) ajoutez une nom de ligne = _Name @ Ordinal, permettant à MingW de mapper sa convention de dénomination STDCALL à celle de MSVC.
    3. Utilisez DLLTool pour convertir la bibliothèque MSVC en une bibliothèque MingW avec la nouvelle définition.

      Cela a fonctionné! Pour compiler le projet, vous devez simplement:

      1. Téléchargez et installez le package QT / Windows, qui inclut MINGW.
      2. Téléchargez le sol et déposez-le dans le dossier Mingw / Bin.
      3. Téléchargez les forfaits de développement pour les bibliothèques tiers et pointez une variable d'environnement à cet emplacement.
      4. Construisez le projet avec les commandes QMAKE / Make habituelles.

        pris de: http://blog.outofhanwell.com.com / 2006/05/01 / Liaison-MSVC-Bibliothèques-avec-MingW-Projects /


1 commentaires

J'essaie actuellement du plug-in Visual Studio pour Qt, d'essayer de construire des applications QT et d'utiliser le compilateur VS (et utilisez My MSVC .Libs).