Question

J'ai téléchargé le code source de Launchy et j'essaie de le créer dans Visual Studio 2005. Le projet Launchy est construit à l’aide de VC7, j’ai donc dû mettre à jour les fichiers du projet vers VC8 et ce processus a semblé bien se dérouler. Cependant, Launchy utilise également les Boost 1.33.1 libs et ce que j'ai construit est le Boost 1.41.0 libs ( props à Boost pour rendre la compilation plus récente beaucoup plus facile à compiler), alors j’ai également mis à jour le projet pour qu'il pointe vers ma nouvelle installation de librairie Boost. Maintenant, j'obtiens l'erreur de l'éditeur de liens suivante:

fatal error LNK1104: cannot open file 'libboost_regex-vc80-mt-sgd-1_41.lib'

J'ai jeté un œil dans le répertoire Boost lib et la correspondance la plus proche que j'ai pu trouver est ...

libboost_regex-vc80-mt-gd-1_41.lib

Notez le 's' manquant. Je ne comprends pas quelle est la différence entre les bibliothèques et si Visual Studio recherche la mauvaise chose ou si mon processus de génération Boost n'a pas réussi à créer les bonnes bibliothèques. Quelqu'un peut-il me diriger dans la bonne direction?

A titre d’expérience, j’ai fait une copie de la regex lib que j’ai obtenue et je l’a renommée comme l’indique l’éditeur de liens. Cela me donne une longue liste d'erreurs de l'éditeur de liens à propos de symboles déjà définis dans msvcrtd.lib, tels que:

error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)

Je vais essayer de créer les bibliothèques Boost 1.33.1 et d’orienter mon fichier de projet Launchy vers celui-ci. Mais j'aimerais quand même savoir ce qui ne va pas avec mes librairies 1.40.0.

Modifier : j'ai trouvé une référence dans la documentation Boost en ce qui concerne les bibliothèques 's':

  

Utilisez cette bibliothèque lors de la liaison statique à la bibliothèque standard C ++ et aux bibliothèques de support d'exécution du compilateur.

Il semble donc que les bibliothèques de "s" sont les bonnes. Il ne me reste plus qu'à comprendre comment les construire.

Solution : j'ai pu créer les librairies boost manquantes à l'aide de la ligne de commande suivante.

bjam --build-type=complete msvc stage

Je l'ai couru après avoir déjà lancé boostrap.bat dans le répertoire où boost vit.

Était-ce utile?

La solution

La différence est clairement décrite dans Boost docs - "mt-sgd" signifie "bibliothèques de débogage, bibliothèques d'exécution statiquement liées, multithread, avec symboles de débogage". "mt-gd" est identique, mais en utilisant des bibliothèques d'exécution liées dynamiquement (par exemple, msvcrtd.lib au lieu de libcmtd.lib).

Modifiez les paramètres du projet pour qu'il utilise la liaison CRT dynamique (c'est-à-dire / MDd au lieu de / MTd) ou créez Boost à l'aide de la liaison statique - le fait de les mélanger ne fonctionnera pas correctement.

Autres conseils

Quelle commande avez-vous utilisée pour renforcer Boost? essayez de spécifier build-type = complete. Normalement, il devrait également construire les bibliothèques.

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