Question

J'ai compris comment configurer VC ++ pour compiler le code dans un fichier .lib au lieu d'un fichier .exe, mais je ne parviens pas à faire la liaison d'une lib avec mes autres fichiers .obj.

Voici comment j’ai configuré les dossiers de la bibliothèque et de l’application. (Je ne sais pas si c'est vrai.)

AppFolder
  App.sln
  App.ncb
  *.h
  *.cpp
  Debug
    *.obj
    App.exe

et quelque part sur le disque dur ...

LibraryFolder
  lib
    Library.lib
  include
    LibrarySolutionFolder
      Library.sln
      Library.ncb
      *.h
      *.cpp
      Debug
        *.obj
        Library.lib

J'ai # compris les fichiers * .h de la bibliothèque à partir des fichiers cpp de mon application, et tout est bien compilé. C’est juste au moment où je crée un lien que j’obtiens une liste de tous les fichiers .lib Les fichiers qui sont recherchés et Library.lib ne sont pas présents même si les répertoires sont répertoriés dans VC ++. Comment puis-je obtenir ce lien? (Et est-ce que je structure correctement les dossiers de la bibliothèque?)

Était-ce utile?

La solution

Sur les propriétés du projet:

Propriétés de configuration - > Lieur - > Entrée - > Dépendances supplémentaires

Ajoutez-le ici.

Ou, dans votre fichier .h pour la bibliothèque, ajoutez:

#pragma comment(lib, "Library")

Ceci le fera automatiquement pour vous.

Autres conseils

Les répertoires VC ++ sont la liste des emplacements de répertoire à rechercher lors de la liaison. Ce n'est pas une liste de bibliothèques à lier.

Vous devez ajouter le fichier lib au champ Dépendances supplémentaires des paramètres de l'éditeur de liens de projet .

Pour créer un lien avec une bibliothèque, vous pouvez soit:

  • Répertoriez-le dans Projet- > Propriétés ...- > Linker, Input- > Dépendances supplémentaires  (Les répertoires VC ++ vous permettent uniquement d’utiliser le nom .lib plutôt que le chemin complet),
  • Ajoutez le projet de bibliothèque à votre application. solution (Sur la solution, cliquez avec le bouton droit de la souris sur > Ajouter - > Projet existant ...), puis utilisez Projet - > Dépendances du projet ..., puis vérifiez votre projet de bibliothèque (assurez-vous que le projet d'application est sélectionné dans la liste déroulante). C’est probablement la meilleure façon de procéder si vous éditez les deux projets, car VC ++ reconstruira la bibliothèque si elle a été modifiée avant la construction de votre application.
  • Si vous êtes certain de n'utiliser que VC ++,

      #pragma comment(lib,"C:\\path\\to\\library.lib")`
    

    (Merci @Nils)

NB: Il semble très étrange que votre dossier de solution de bibliothèque se trouve dans un répertoire 'include': ils sont vraiment destinés aux fichiers * .h (ou à d’autres fichiers #include d).

À partir de la ligne de commande:

  

cl / EHsc {objfiles} + / link   / LIBPATH: LibraryFolder Library.lib

Où {objfiles} + signifie un ou plusieurs fichiers objet ou cpp.

VC ne lie pas simplement la bibliothèque si vous incluez le fichier d'en-tête.

Vous devez indiquer à l'éditeur de liens d'utiliser la bibliothèque. Pour de bonnes raisons: vous avez déjà des milliers de bibliothèques dans votre dossier de bibliothèque. Si MSVC devait toutes les rechercher à chaque fois que vous liez votre programme, il devrait parcourir des centaines de mégaoctets de données.

Cela prendrait pas mal de temps, donc ce n'est pas fait par défaut.

Pour VC, vous pouvez également donner un indice à l’éditeur de liens à l’intérieur de votre source. Pour ce faire, vous ajoutez la ligne suivante quelque part dans votre code source (l'en-tête de la bibliothèque peut être un bon endroit).

#pragma comment(lib,"c:\\path_to_library\\libname.lib")

Ce n’est pas une plate-forme indépendante, mais le moyen le plus pratique d’associer automatiquement une bibliothèque à un projet utilisant MSVC.

Une autre méthode consiste simplement à ajouter l'éditeur de liens aux paramètres du projet. Les informations pertinentes peuvent être trouvées dans les paramètres de l'éditeur de liens de votre projet. N'oubliez pas d'ajouter la bibliothèque aux configurations de publication et de débogage.

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