web-dev-qa-db-fra.com

erreur fatale LNK1104: impossible d'ouvrir le fichier 'libboost_system-vc110-mt-Gd-1_51.lib'

Apparemment, je ne peux pas faire en sorte que ça fonctionne. J'ai créé une application console simple (qui dépend de la bibliothèque websocket++) qui nécessite des bibliothèques Boost .. mais lorsque j'essaie de compiler, je reçois:

erreur fatale LNK1104: impossible d'ouvrir le fichier 'libboost_system-vc110-mt-Gd-1_51.lib'

Cependant, j'ai fait le bjam qui a créé la bibliothèque dans (boost_root)/stage/libs et j'ai lié le chemin d'accès aux bibliothèques au compilateur C++/Additionnals includes.

Si je regarde dans (boost_root)/stage/libs, le fichier libboost_system-vc110-mt-Gd-1_51.lib n'y est pas. Il s’appelle plutôt libboost_system-vc110-mt-sgd-1_51.lib.

Une idée?

71
Rushino

Le paramètre C++ → Général → Répertoires d'inclusion supplémentaires sert à répertorier les répertoires dans lesquels le compilateur va rechercher les fichiers d'en-tête. 

Vous devez indiquer à l'éditeur de liens où rechercher les bibliothèques auxquelles vous souhaitez créer un lien. Pour accéder à ce paramètre, cliquez avec le bouton droit de la souris sur le nom du projet dans la fenêtre Solution Explorer, puis sur Propriétés → Éditeur de liens → Général → Autres répertoires de bibliothèque. Entrez <boost_path>\stage\lib ici (c’est le chemin où se trouvent les bibliothèques si vous construisez Boost en utilisant les options par défaut).

79
Praetorian

C'est la manière la plus simple pour un amateur comme moi d'étudier le C++ par leurs propres moyens:

Commencez par décompresser 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 la 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 pré-compilateur.
  10. Cliquez sur créer/utiliser un en-tête pré-compilé.
  11. Sélectionnez ne pas utiliser l'en-tête pré-compilé.

Ensuite, allez à la bibliothèque de liens où vous avez rencontré vos problèmes.

  1. Allez à où le fichier extrait était c:\boost_1_57_0.
  2. Cliquez sur booststrap.bat (ne prenez pas la peine de taper dans la fenêtre de commande, attendez et ne fermez pas la fenêtre qui est l'endroit où j'ai eu mon problème et qui m'a pris deux semaines à résoudre. Au bout d'un moment, la booststrap s'exécutera et produira le même fichier, mais avec deux noms différents: b2 et bjam.
  3. Cliquez sur b2 et attendez qu'il soit exécuté.
  4. Cliquez sur bjam et attendez qu'il soit exécuté. Ensuite, un dossier sera produit appelé stage.
  5. Faites un clic droit sur le projet.
  6. Cliquez sur la propriété.
  7. Cliquez sur l'éditeur de liens.
  8. Cliquez sur général.
  9. Cliquez sur inclure le répertoire supplémentaire de la bibliothèque.
  10. Sélectionnez la partie de la bibliothèque, par exemple c:\boost_1_57_0\stage\lib.

Et vous êtes prêt à partir!

74
Wu Jie

J'ai eu le même problème. Cela est dû au fait que j'ai compilé 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) dans Propriétés du projet -> Général -> Plataform Toolset et modifier la valeur entre Visual Studio 2012 (v110) vers Visual Studio 2010 (v100) .

6
Jamillo Santos

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

3
Plinio

Encore une autre solution:

J'étais perplexe parce que j'incluais boost_regex-vc120-mt-Gd-1_58.lib dans ma propriété Link-> Additional Dependencies, mais le lien m'avait dit qu'il ne pouvait pas ouvrir libboost_regex-vc120-mt-Gd-1_58.lib ( notez le préfixe lib). Je n'ai pas précisé libboost_regex-vc120-mt-Gd-1_58.lib.

J'essayais d'utiliser (et j'avais construit) les bibliothèques boost dynamiques (.dlls) mais je n'avais pas défini la macro BOOST_ALL_DYN_LINK. Apparemment, la compilation contient des indications pour inclure une bibliothèque et, sans BOOST_ALL_DYN_LINK, celle-ci recherche la bibliothèque statique (avec le préfixe lib), pas la bibliothèque dynamique (sans préfixe lib).

3
wdtj

Si vous avez des difficultés à créer boost ou si vous préférez ne pas le faire, vous pouvez également télécharger les fichiers lib à partir de SourceForge . Le lien vous mènera à un dossier contenant les fichiers lib et dll compressés pour la version 1.51. Cependant, vous devriez pouvoir modifier le lien pour spécifier la version de votre choix. Apparemment, l'installateur de BoostPro a quelques problèmes.

2
Bob Bryan

J'ai rencontré un problème similaire lors de l'utilisation de boost unit testing dans Visual Studio 2015 (Community Edition):

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

alors j'ai pensé partager ma solution.

Vous pouvez créer un projet de test d'unités de surimpression de deux manières (et cette solution fonctionne pour les deux):

  1. en utilisant le Boost Unit Test Adapter
  2. ou en créant une application console Win32 ( étapes ici ) et en remplaçant la fonction principale par une fonction de test de l’unité de démarrage ( étapes ici ).

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

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

  1. bootstrap.bat
  2. "C:\Fichiers de programme (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
  3. bjam --clean
  4. bjam -j4 --debug-symboles = on --build-type = ensemble complet d'outils = msvc-14.0 threading = multi runtime-link = partagé address-model = 32

msvc-14.0 indique que nous avons besoin de la version de Visual Studio 2015 (VS 2015 = v14.0 = v140) et address-model = 32 indique que nous avons besoin de la plate-forme 32 (mais la même chose peut être fait pour 64 bits).

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

  • Définissez "Général> Platform Toolset" sur Visual Studio 2015 (v140). 

  • Incluez le chemin d'accès au dossier de renforcement (par exemple, C:\boost_1_57_0) et le chemin d'accès au sous-dossier contenant les fichiers binaires (par exemple, C:\boost_1_57_0\stage\lib) dans:

    • "C\C++> Répertoire d'inclusion supplémentaire
    • et "Éditeur de liens> Répertoires de bibliothèque supplémentaires".
1
Aciel

b2 -j% cores% toolset =% msvcver% adresse-modèle = 64 architecture = x86 lien = thread statique = multi runtime-link = partagé --build-type = étape minimale --stagedir = étape/x64

Propriétés → Éditeur de liens → Général → Répertoires de bibliothèque supplémentaires $ (BOOST)\stage \x64\ lib

0
Dmitry Ivanov

J'ai eu le même problème rapporté ici. J'ai résolu le problème en déplaçant le fichier mainTest.cpp d'un sous-dossier src/mainTest/vers le dossier principal src / Je suppose que c'était également votre problème 

0
fiorentinoing

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib

Dans mon cas, bootstrap/bjam n'était pas disponible (les bibliothèques avaient été précompilées et validées dans SCM) sur l'ancien projet hérité. Les noms de fichiers des bibliothèques ne comportaient pas de version VC ni BOOST, par exemple: libboost_regex-mt-sgd.lib, cependant Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib a été déclenché automatiquement.

Correction en ajoutant manuellement le nom de fichier non-versionné à:

<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>

et liste noire le ...vc120-mt-sgd-1_55.lib dans

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
0
kevinf