Erreurs de symbole externe non résolues lors du basculement de la bibliothèque de construction vers exe ou dll

StackOverflow https://stackoverflow.com/questions/168232

  •  03-07-2019
  •  | 
  •  

Question

Je construis une application en tant que bibliothèque, mais pour être sûr de pouvoir obtenir le résultat souhaité, je l’ai basculée pour produire un fichier .exe. Dès que je l'ai fait, j'ai eu plusieurs erreurs concernant des symboles externes non résolus.

Au début, je pensais que je n'avais pas défini de chemin d'accès à la bibliothèque tierce à laquelle je faisais référence, aussi j'ai ajouté le dossier à ma variable de chemin d'accès et même l'a ajouté à mes fichiers d'inclusion, références et source, juste pour être sûr d'avoir tous les chemins.

Je reçois toujours l'erreur:

  

erreur LNK2019: externe non résolu   symbole " __ declspec (dllimport) public:   vide statique       __cdecl xercesc_2_8 :: XMLPlatformUtils :: Initialize (char   const * const, char const *   const, classe xercesc_2_8 :: PanicHandler   * const, classe xercesc_2_8 :: MemoryManager *   const, bool) "   (__imp_? Initialize @ XMLPlatformUtils @ xercesc_2_8 @@ SAXQBD0QAVPanicHandler @ 2 @ QAVMemoryManager @ 2 @ _N @ Z)   référencé dans la fonction "void __cdecl"   xsd :: cxx :: xml :: initialize (void) "   (? initialize @ xml @ cxx @ xsd @@ YAXXZ)

La raison pour laquelle je le demande ici est parce que dans Visual Studio, lorsque je l'ai construite en tant que bibliothèque, je n'ai pas eu ces erreurs, mais en tant que dll et exe, c'est le cas.

Quelqu'un a des idées?

Était-ce utile?

La solution

Construisant une bibliothèque, l’éditeur de liens n’a pas besoin de résoudre les symboles importés. Cela se produit uniquement quand il commence à relier des fichiers objet et des bibliothèques.

C'est pourquoi vous ne voyez l'erreur que lors de la construction d'un exécutable.

En effet, dans VC2008 (et 2005, si je me souviens bien), utilisez les propriétés du projet - > Lieur - > Entrée - > Dépendances supplémentaires. Les bibliothèques dont vous avez besoin doivent être séparées par des espaces (impair, hé?)

Bonne chance!

Autres conseils

Vous devez également spécifier que vous souhaitez établir un lien avec cette bibliothèque en particulier. Les chemins de lien indiquent simplement à l'éditeur de liens où se trouvent les données que vous devez rechercher et non ce qu'il faut rechercher. Vous devrez également spécifier que vous vous associez à la bibliothèque en question (xerces?).

Malheureusement, je ne sais pas comment spécifier cela dans MSVC, mais c'est probablement quelque part sous "Options de l'éditeur de liens".

Comme @coppro l'a dit, vous devez spécifier que vous souhaitez établir un lien avec cette bibliothèque. Lorsque vous générez un fichier EXE ou DLL, un éditeur de liens est exécuté et il doit rechercher toutes les fonctions que vous utilisez. Toutefois, pour créer une bibliothèque, le bibliothécaire est exécuté et il ne doit pas résoudre toutes les références de fonctions (mais quand vous utilisez cette lib dans un fichier EXE, vous devrez, à nouveau).

Allez donc dans les options du projet, Options de l'éditeur de liens, Entrée, et répertoriez la bibliothèque qui définit la fonction manquante (xerces.lib?) sous Chemins de bibliothèque supplémentaires. Vous devrez peut-être ajouter son emplacement sous Chemins de bibliothèque supplémentaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top