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

88

Je ne peux pas faire fonctionner ça. J'ai créé une application console simple (qui dépend de la websocket++bibliothèque) qui a besoin de Boostbibliothèques .. mais quand j'essaye de compiler, j'obtiens:

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 lib in (boost_root)/stage/libset j'ai lié le chemin vers les libs au compilateur C++/Additionnals includes.

Si je regarde dans (boost_root)/stage/libsle fichier libboost_system-vc110-mt-gd-1_51.libn'est pas là. Il est appelé à la libboost_system-vc110-mt-sgd-1_51.libplace.

Une idée?

Rushino
la source
1
J'ai pu construire le fichier libboost_system-vc110-mt-gd-1_51.lib en faisant une compilation complète avec bjam mais j'obtiens toujours l'erreur.
Rushino
22
Ouvrez le VS2012 developer command prompt, accédez au répertoire racine de votre boost et tapez bootstrap, puis tapez b2et vous devriez obtenir un ensemble complet de fichiers de bibliothèque.
Jesse Good
Avez-vous ajouté les chemins d'inclusion et les chemins de l'éditeur de liens à votre projet?
Jesse Good
1
Construisez-vous votre application avec /MD?
Mahesh
Si vous pouvez télécharger au lieu de compiler, récupérez les bibliothèques
gorogm

Réponses:

93

Le paramètre C ++ → Général → Additional Inclure les répertoires sert à répertorier les répertoires dans lesquels le compilateur recherchera les fichiers d'en-tête.

Vous devez indiquer à l'éditeur de liens où rechercher les bibliothèques vers lesquelles créer un lien. Pour accéder à ce paramètre, cliquez avec le bouton droit sur le nom du projet dans la fenêtre Explorateur de solutions , puis Propriétés → Éditeur de liens → Général → Répertoires de bibliothèques supplémentaires . Entrez <boost_path>\stage\libici (c'est le chemin où se trouvent les bibliothèques si vous construisez Boost en utilisant les options par défaut).

Prétorien
la source
pouvez-vous m'expliquer quel est le boost_path
ggsmartboy
1
@ggsmartboy C'est le chemin où se trouvent les fichiers source de boost (le même chemin que vous listez dans le compilateur inclut des chemins pour qu'il puisse trouver les en-têtes de boost). La réponse suppose que vous avez construit vous-même Boost (sans utiliser de distribution) en utilisant les options de construction par défaut.
Prétorien
Impressionnant. M'a sauvé un vrai mal de tête aussi. Pourquoi j'ai semblé incapable de repérer cela dans la documentation du boost (si c'est même là), je ne sais pas! :)
absentmindeduk
2
Les paramètres mentionnés dans cette réponse sont trouvés si vous faites un clic droit sur le projet et choisissez les propriétés (pour les noobs comme moi, cliquez avec le bouton droit sur la solution, allez dans Outils> Options, etc. Ces options n'étaient pas présentes sur tous mes projets). VS2013
Mr_and_Mrs_D
1
@Mr_and_Mrs_D Vous avez raison, j'ai supposé que le lecteur connaissait cette partie. Mis à jour.
Prétorien
97

C'est le moyen le plus simple pour un amateur comme moi qui étudie seul le C ++:

Décompressez d'abord la bibliothèque boost dans n'importe quel 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. Incluez 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. Sélectionnez ne pas utiliser l'en-tête pré-compilé.

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

  1. Allez à où était le fichier extrait c:\boost_1_57_0.
  2. Cliquez sur booststrap.bat(ne prenez pas la peine de taper dans la fenêtre de commande, attendez simplement et ne fermez pas la fenêtre où j'ai eu mon problème qui m'a pris deux semaines à résoudre. Après un certain temps, le booststraplancera et produira le même fichier, mais maintenant avec deux noms différents:, b2et bjam.
  3. Cliquez sur b2et attendez qu'il s'exécute.
  4. Cliquez sur bjamet 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 l'éditeur de liens.
  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 exemple c:\boost_1_57_0\stage\lib.

Et vous êtes prêt à partir!

Wu Jie
la source
3
Merci beaucoup Wu Jie - Je n'avais jamais rien fait de tel auparavant et ces étapes étaient exactement ce dont j'avais besoin pour construire Boost et produire le fichier de bibliothèque 'libboost_serialization-vc140-mt-gd-1_57.lib' manquant que j'avais du mal à lier: )
Vixxd
5
Merci, j'aime les belles instructions détaillées. Pour l'étape 2/3/4 de la configuration de boost, j'ai plutôt fait: a) ouvrir une invite de ligne de commande en tant que root ; b) passez au répertoire boost_1_57_0; c) tapez bootstrap.bat(cela a pris 10 à 20 secondes); d) tapez ./b2comme indiqué (il a ensuite fallu 30 à 40 minutes).
Darren Cook
1
J'ai dû ouvrir bootstrap.bat à l'aide de l'invite de commande Visual Studio, car l'invite de commande ordinaire ne savait pas comment traiter la commande 'cl'.
jlaverde
20/02/2018, votre solution fonctionne pour moi (VS2017 + Boost 1.66). Merci beaucoup.
CaTx
Merci pour les démarches pour les débutants. J'aimerais que tout le monde donne toujours des réponses comme vous l'avez donné.
Mudit Jain
6

J'ai eu le même problème. Cela a été causé parce que j'ai compilé le Boost avec le Visual C ++ 2010 (v100) et j'ai essayé d'utiliser la bibliothèque avec le Visual Studio 2012 (v110) par erreur.

Donc, j'ai changé les configurations (dans Visual Studio 2012) en allant dans Propriétés du projet -> Général -> Plataform Toolset et changez la valeur de Visual Studio 2012 (v110) en Visual Studio 2010 (v100) .

Jota Santos
la source
7
J'espère que vous réalisez que lorsque vous modifiez l'ensemble d'outils de la plate-forme pour utiliser la v100, vous dites à l'IDE VS2012 d'utiliser le compilateur fourni avec VS2010. Les fonctionnalités C ++ 11 qui ont été ajoutées au compilateur VS2012 ne seront pas disponibles. Une meilleure solution consiste à compiler Boost à l'aide du compilateur VS2012; vous pouvez faire coexister les bibliothèques générées de 2010 et 2012 car Boost place le numéro de version du compilateur dans les noms de fichiers de sortie.
Prétorien
Vous avez raison et je suis conscient. J'ai peur de ce qui pourrait arriver si je mets à niveau les bibliothèques et le compilateur. Donc, lorsque le projet sera terminé, je réglerai tout cela. Merci!
Jota Santos
6

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 n'arrêtait pas de 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 boost (.dlls) mais je n'avais pas défini la macro BOOST_ALL_DYN_LINK. Apparemment, il y a des astuces dans la compilation pour inclure une bibliothèque, et sans BOOST_ALL_DYN_LINK, il recherche la bibliothèque statique (avec le préfixe lib), pas la bibliothèque dynamique (sans préfixe lib).

wdtj
la source
Encore 1 seul vote positif, mais je me retrouve ici tous les quelques mois, me rappelant à nouveau quelle est la solution à mon problème !!
Neil Gatenby
3

J'ai eu le même problème et mon erreur a été d'avoir 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) pas v110 comme visual c ++ 2012. J'ai donc téléchargé boost_1_55_0-msvc-10.0-32.exe et maintenant tout va bien jusqu'à présent.

Plinio
la source
2

Au cas où vous auriez du mal à construire boost ou préférez ne pas le faire, une alternative est de télécharger les fichiers lib depuis SourceForge . Le lien vous mènera à un dossier de fichiers lib et dll compressés pour la version 1.51. Mais vous devriez pouvoir modifier le lien pour spécifier la version de votre choix. Apparemment, le programme d'installation de BoostPro a quelques problèmes.

Bob Bryan
la source
2

J'ai eu un problème similaire en essayant d'utiliser les tests unitaires boost 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 unitaire boost de deux manières (et cette solution fonctionne pour les deux):

  1. à l'aide de l' adaptateur de test Boost Unit
  2. ou en créant une application de console Win32 ( étapes ici ) et en remplaçant la fonction principale par une fonction de test unitaire boost ( é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 soit télécharger boost avec les binaires corrects (compilés à l'aide de msvc v140), soit extraire les binaires vous-même en exécutant les commandes suivantes à partir de la ligne de commande:

  1. bootstrap.bat
  2. «C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat» x86
  3. bjam - propre
  4. bjam -j4 --debug-symboles = on --build-type = ensemble d'outils complet = msvc-14.0 threading = multi runtime-link = modèle d'adresse partagé = 32

msvc-14.0 spécifie que nous avons besoin de la version Visual Studio 2015 (VS 2015 = v14.0 = v140), et address-model = 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, 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 effectuez les choix suivants:

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

  • Incluez le chemin vers le dossier boost (par exemple C: \ boost_1_57_0) et le chemin vers le 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 " Linker> Annuaires de bibliothèques supplémentaires ".
Aciel
la source
1

b2 -j% cores% toolset =% msvcver% address-model = 64 architecture = x86 link = static threading = multi runtime-link = shared --build-type = minimal stage --stagedir = stage / x64

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

Dmitry Ivanov
la source
Un peu plus d'élaboration sur ce que font ces lignes et pourquoi -> aiderait à améliorer la qualité de cette réponse.
Anton Menshov
0

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

fiorentinoing
la source
0

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 étaient précompilées et validées dans SCM) sur l'ancien projet hérité. Les bibliothèques n'avaient pas de versioning VC ou BOOST dans leurs noms de fichiers, par exemple:, libboost_regex-mt-sgd.libcependant, elles se Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.libsont déclenchées automatiquement.

Correction en ajoutant manuellement le nom de fichier sans version à:

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

et listes noires l' ...vc120-mt-sgd-1_55.liben

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