101 votes

fatal error LNK1104 : cannot open file 'libboost_system-vc110-mt-gd-1_51.lib' (erreur fatale)

Il semble que je n'arrive pas à le faire fonctionner. J'ai fait une application console simple (qui dépend de websocket++ ) qui nécessitent Boost mais quand j'essaie de compiler, j'obtiens :

fatal error LNK1104 : cannot open file 'libboost_system-vc110-mt-gd-1_51.lib' (erreur fatale)

Cependant, j'ai fait le bjam qui a créé la librairie en (boost_root)/stage/libs et j'ai lié le chemin vers les librairies au compilateur C++/Additionnals includes .

Si je regarde dans (boost_root)/stage/libs le fichier libboost_system-vc110-mt-gd-1_51.lib n'est pas là. Il s'appelle libboost_system-vc110-mt-sgd-1_51.lib à la place.

Une idée ?

115voto

Wu Jie Points 1081

C'est le moyen le plus simple pour un amateur comme moi qui étudie le C++ par lui-même :

Tout d'abord, décompressez la bibliothèque Boost dans le répertoire de votre choix. Je recommande c:\directory .

  1. Ouvrez votre visuel C++.
  2. Créez un nouveau projet.
  3. Faites un clic droit sur le projet.
  4. Cliquez sur la propriété.
  5. Cliquez sur C/C++.
  6. Cliquez sur "Général".
  7. Sélectionnez une bibliothèque d'inclusion supplémentaire.
  8. Inclure la destination de la bibliothèque, par exemple c:\boost_1_57_0 .
  9. Cliquez sur l'en-tête du pré-compilateur.
  10. Cliquez sur créer/utiliser un en-tête précompilé.
  11. Choisissez de ne pas utiliser l'en-tête précompilé.

Rendez-vous ensuite à la bibliothèque de liens où vous avez rencontré vos problèmes.

  1. Allez à l'endroit où se trouvait le fichier extrait c:\boost_1_57_0 .
  2. Cliquez sur booststrap.bat (ne vous embêtez pas à taper dans la fenêtre de commande, attendez simplement et ne fermez pas la fenêtre ; c'est là que j'ai eu mon problème qui m'a pris deux semaines à résoudre. Après un certain temps, le booststrap s'exécutera et produira le même fichier, mais maintenant avec deux noms différents : b2 y bjam .
  3. Cliquez sur b2 et attendez qu'il s'exécute.
  4. Cliquez sur bjam et attendez qu'il s'exécute. Ensuite un dossier sera produit appelé stage .
  5. Faites un clic droit sur le projet.
  6. Cliquez sur la propriété.
  7. Cliquez sur le linker.
  8. Cliquez sur "Général".
  9. Cliquez sur inclure un répertoire de bibliothèque supplémentaire.
  10. Sélectionnez la partie de la bibliothèque, par ex. c:\boost_1_57_0\stage\lib .

Et vous êtes prêt à partir !

8voto

wdtj Points 145

Encore une autre solution :

J'étais perplexe car j'incluais boost_regex-vc120-mt-gd-1_58.lib dans ma propriété Link->Additional Dependencies, mais le lien continuait à me dire qu'il ne pouvait pas ouvrir libboost_regex-vc120-mt-gd-1_58.lib (notez le préfixe lib). Je n'ai pas spécifié libboost_regex-vc120-mt-gd-1_58.lib.

J'essayais d'utiliser (et j'avais construit) les bibliothèques dynamiques de Boost (.dlls) mais la macro BOOST_ALL_DYN_LINK n'était pas définie. Apparemment, il y a des indications dans la compilation pour inclure une bibliothèque, et sans BOOST_ALL_DYN_LINK, il cherche la bibliothèque statique (avec le préfixe lib), pas la bibliothèque dynamique (sans préfixe lib).

6voto

Jamillo Santos Points 189

J'ai eu le même problème. Il est dû au fait que j'ai compilé le Boost avec Visual C++ 2010 (v100) et que j'ai essayé d'utiliser la bibliothèque avec Visual Studio 2012 (v110) par erreur.

J'ai donc modifié les configurations (dans Visual Studio 2012) en allant à Propriétés du projet -> Général -> Ensemble d'outils Plataform et changez la valeur de Visual Studio 2012 (v110) à Visual Studio 2010 (v100) .

3voto

Plinio Points 1

J'ai eu le même problème et mon erreur était que j'avais installé le binaire boost_1_55_0-msvc-11.0-32.exe pour l'utiliser avec visual c++ 2010 qui a la version v100 (propriétés du projet->ConfiguratioProperties->General->platformTooset) et non v110 comme visual c++ 2012. J'ai donc téléchargé boost_1_55_0-msvc-10.0-32.exe et tout va bien jusqu'à présent.

3voto

Aciel Points 105

J'ai eu un problème similaire en essayant d'utiliser tests unitaires boost en Visual Studio 2015 (édition communautaire) :

erreur fatale LNK1104 : libboost_unit_test_framework-vc140-mt-1_57

alors j'ai pensé que je devais partager ma solution.

Vous pouvez créer un projet de test unitaire Boost de deux façons (et cette solution fonctionne pour les deux) :

  1. en utilisant le Adaptateur de test de l'unité Boost
  2. ou en créant une application Console Win32 ( étapes ici ), et en substituant la fonction principale par une fonction de test unitaire boost ( étapes ici ).

Voici les étapes que j'ai suivies pour faire fonctionner les deux projets :

Tout d'abord, téléchargez la version boost souhaitée (par exemple, boost_1_57_0 ). Vous pouvez soit télécharger boost avec les binaires corrects (compilés avec msvc v140), soit extraire les binaires vous-même en exécutant les commandes suivantes en ligne de commande :

  1. bootstrap.bat
  2. " C:\Program Fichiers (x86) \Microsoft Visual Studio 14.0 \VC\vcvarsall.bat " x86
  3. bjam --clean
  4. bjam -j4 --debug-symbols=on --build-type=complete toolset=msvc-14.0 threading=multi runtime-link=shared adresse-modèle=32

msvc-14.0 précise que nous avons besoin de la version 2015 de Visual Studio (VS 2015 = v14.0 = v140), et modèle d'adresse=32 spécifie que nous avons besoin de la plate-forme 32 (mais la même chose peut être faite pour 64 bits).

Une fois que vous avez les binaires, allez dans Visual Studio, sélectionnez le projet Boost Unit Testing que vous avez créé. Allez à Propriétés du projet > configuration (à partir du menu principal) et faites les choix suivants :

  • Définissez le " Général > Plate-forme Toolset " à Visual Studio 2015 (v140).

  • Inclure le chemin d'accès au dossier "boost" (par ex. C:\boost_1_57_0 ) et le chemin d'accès au sous-dossier contenant les fichiers binaires (par ex. C:\boost_1_57_0\stage\lib ) dans :

    • " C \C ++ > Répertoire d'inclusion supplémentaire "
    • et " Linker > Répertoires de bibliothèques supplémentaires ".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X