Comment utiliser les bibliothèques compilées avec MingW dans MSVC?
J'ai compilé plusieurs bibliothèques avec MingW/MSYS... l'électricité statique, les bibliothèques sont toujours .un fichiers.
Lorsque j'essaie de lier la bibliothèque avec MSVC projet, Visual Studio jette 'externe non résolu de symboles ... Cela veut dire que l' .une bibliothèque statique est incompatible avec MS C++ Linker. Je présume qu'il doit être converti en un MSVC compatible .fichier lib.
.un et .lib sont juste AR archives de .o ou .les fichiers obj, ainsi en est-il de toute façon comment utiliser MingW compilé libs dans un MSVC projet? Ou dois-je compiler/lien tout simplement dans un compilateur/linker - MSVC seulement/MingW?
Le compilateur MingW qui est dit pour être compatible avec MSVC.
J'ai lu quelques discussions sur ce sujet, mais ils ont surtout dire que le fait de renommer le fichier .lib devrait faire le travail, mais malheureusement il ne fonctionne pas pour moi.
Les bibliothèques Im essayant de lien sont écrits en C.
MSVC de l'éditeur de liens jette les erreurs comme:
error LNK2019: unresolved external symbol "int __cdecl openssl_call(struct ssl_State *,int,int,int)" (?openssl_call@@YAHPAUssl_State@@HHH@Z) referenced in function _main MyAPP.obj
... et 4 plus de même des erreurs se référant à d'autres fonctions appelées à partir de mon application.
Merci pour tous les conseils.
source d'informationauteur NumberFour
Vous devez vous connecter pour publier un commentaire.
Basée sur cette erreur, vous mettre dans un commentaire:
Essayer de mettre
extern "C"
autour de vos fichiers pour openssl. Par exemple:à l'aide de extern "C" va indiquer au compilateur que les fonctions sont l'aide d'une liaison C, pas du C++, ce qui empêchera d'effectuer name mangling sur les fonctions. Donc, il va chercher la fonction openssl_call dans la bibliothèque plutôt que d' ?openssl_call@@YAHPAUssl_State@@HHH@.
Les bibliothèques sont compatibles, mais uniquement si vous la fournissez une interface C. MSVC et g++ utiliser différents nom du modificateur de régimes, de sorte que vous ne pouvez pas facilement lien du code C++ créé avec un code créé par l'autre.
Je encounted les mêmes situations que d'utiliser mingw-dll compilée dans MSVC. J'ai utiliser les outils suivants pour le faire fonctionner:
1) utiliser gcc comme ça:
Le gras préciser que gcc génère un *fichier def que les scripts de vos éléments exportés.Ensuite, vous devez utiliser lib.exe qui distribuait avec MSVC, par exemple comme ceci:
Ensuite, il y aura un your_dll.fichier lib, vient de lib.exe.(À supposer que you_dll.dll situé dans le même répertoire que your_dll.def).
actuellement, je peux utiliser le caractère *.lib dans mon MSVC projet et le lien de la dll correctement, mais j'ai eu l'erreur d'exécution. De toute façon, ces travaux font de votre lien réalisable.