it-swarm.com.de

schwerwiegender Fehler LNK1104: Datei "libboost_system-vc110-mt-Gd-1_51.lib" kann nicht geöffnet werden

Anscheinend kann ich das nicht zum Laufen bringen. Ich habe eine einfache Konsolenanwendung (die auf websocket++ library angewiesen ist) erstellt, die Boost-Bibliotheken benötigt .. aber wenn ich versuche zu kompilieren, bekomme ich:

schwerwiegender Fehler LNK1104: Datei "libboost_system-vc110-mt-Gd-1_51.lib" kann nicht geöffnet werden

Ich habe jedoch das bjam gemacht, das die Bibliothek in (boost_root)/stage/libs erstellt hat, und ich habe den Pfad zu den Bibliotheken mit dem Compiler C++/Additionnals includes verknüpft.

Wenn ich in (boost_root)/stage/libs schaue, ist die Datei libboost_system-vc110-mt-Gd-1_51.lib nicht vorhanden. Es heißt stattdessen libboost_system-vc110-mt-sgd-1_51.lib.

Irgendeine Idee?

71
Rushino

Der Parameter C++ → Allgemein → Zusätzliche Include-Verzeichnisse dient zum Auflisten von Verzeichnissen, in denen der Compiler nach Header-Dateien sucht. 

Sie müssen dem Linker mitteilen, wo er nach Bibliotheken suchen muss, zu denen eine Verknüpfung erstellt werden soll. Um auf diese Einstellung zuzugreifen, klicken Sie mit der rechten Maustaste auf den Projektnamen im Fenster Solution Explorer und anschließend auf Eigenschaften → Linker → Allgemein → Zusätzliche Bibliotheksverzeichnisse. Geben Sie hier <boost_path>\stage\lib ein (dies ist der Pfad, in dem sich die Bibliotheken befinden, wenn Sie Boost mit Standardoptionen erstellen).

79
Praetorian

Dies ist der einfachste Weg für einen Amateur wie mich, der allein C++ studiert:

Entpacken Sie die Boost-Bibliothek zunächst in ein beliebiges Verzeichnis Ihrer Wahl. Ich empfehle c:\directory.

  1. Öffnen Sie Ihr visuelles C++.
  2. Erstellen Sie ein neues Projekt.
  3. Klicken Sie mit der rechten Maustaste auf das Projekt.
  4. Klicken Sie auf Eigenschaft.
  5. Klicken Sie auf C/C++.
  6. Klicken Sie auf Allgemein.
  7. Wählen Sie zusätzliche Include-Bibliothek aus.
  8. Fügen Sie das Bibliotheksziel hinzu. z.B. c:\boost_1_57_0.
  9. Klicken Sie auf den Header des Pre-Compilers.
  10. Klicken Sie auf vorkompilierten Header erstellen/verwenden.
  11. Wählen Sie nicht vorkompilierten Header aus.

Gehen Sie dann zur Linkbibliothek über, in der Sie Ihre Probleme hatten.

  1. Gehe zu war die extrahierte Datei c:\boost_1_57_0.
  2. Klicken Sie auf booststrap.bat (machen Sie sich nicht die Mühe, im Befehlsfenster zu tippen. Warten Sie nicht und schließen Sie nicht das Fenster, an dem ich mein Problem hatte, für das ich zwei Wochen gebraucht hatte. Nach einer Weile wird die booststrap ausgeführt und dasselbe erzeugt Datei, aber jetzt mit zwei verschiedenen Namen: b2 und bjam.
  3. Klicken Sie auf b2 und warten Sie, bis es ausgeführt wird.
  4. Klicken Sie auf bjam und warten Sie, bis es ausgeführt wird. Dann wird ein Ordner namens stage erstellt.
  5. Klicken Sie mit der rechten Maustaste auf das Projekt.
  6. Klicken Sie auf Eigenschaft.
  7. Klicken Sie auf den Linker.
  8. Klicken Sie auf Allgemein.
  9. Klicken Sie auf das zusätzliche Bibliotheksverzeichnis.
  10. Wählen Sie den Teil der Bibliothek aus, z. c:\boost_1_57_0\stage\lib.

Und du bist gut zu gehen!

74
Wu Jie

Ich hatte das gleiche Problem. Dies wurde verursacht, weil ich den Boost mit Visual C++ 2010 (v100) kompiliert habe und versucht habe, die Bibliothek versehentlich mit Visual Studio 2012 (v110) zu verwenden.

Also änderte ich die Konfigurationen (in Visual Studio 2012) unter Projekteigenschaften -> Allgemein -> Plataform Toolset und änderte den Wert von Visual Studio 2012 (v110) zu Visual Studio 2010 (v100) .

6
Jamillo Santos

Ich hatte das gleiche Problem und mein Fehler war, dass ich die Binärdatei boost_1_55_0-msvc-11.0-32.exe zur Verwendung mit Visual C++ 2010 installiert habe. Diese Version hat die Version v100 (Projekteigenschaften-> ConfiguratioProperties-> General-> platformTooset) nicht v110 als visual c ++ 2012. Also habe ich boost_1_55_0-msvc-10.0-32.exe heruntergeladen und jetzt ist alles soweit ok. 

3
Plinio

Noch eine andere Lösung:

Ich war verblüfft, weil ich boost_regex-vc120-mt-Gd-1_58.lib in meine Link-> Additional Dependencies-Eigenschaft aufgenommen hatte. Der Link sagte jedoch immer, dass er nicht geöffnet werden konnte. Libboost_regex-vc120-mt-Gd-1_58.lib ( Beachten Sie das lib-Präfix). Ich habe libboost_regex-vc120-mt-Gd-1_58.lib nicht angegeben.

Ich habe versucht, die dynamischen Boost-Bibliotheken (.dlls) zu verwenden (und hatte sie erstellt), aber das Makro BOOST_ALL_DYN_LINK wurde nicht definiert. Anscheinend gibt es im Compile Hinweise, eine Bibliothek einzuschließen, und ohne BOOST_ALL_DYN_LINK wird nach der statischen Bibliothek (mit dem Präfix lib) und nicht nach der dynamischen Bibliothek (ohne Präfix lib) gesucht.

3
wdtj

Falls Sie Probleme beim Aufbau des Boosts haben oder dies lieber nicht tun möchten, können Sie die lib-Dateien von SourceForge herunterladen. Der Link führt Sie zu einem Ordner mit gezippten lib- und dll-Dateien für Version 1.51. Sie sollten den Link jedoch bearbeiten können, um die gewünschte Version anzugeben. Anscheinend hat das Installationsprogramm von BoostPro einige Probleme.

2
Bob Bryan

Beim Versuch, boost unit testing in Visual Studio 2015 (Community Edition) zu verwenden, hatte ich ein ähnliches Problem:

schwerwiegender Fehler LNK1104: libboost_unit_test_framework-vc140-mt-1_57

also dachte ich, ich würde meine Lösung teilen.

Sie können ein Boost-Unit-Testprojekt auf zwei Arten erstellen (und diese Lösung funktioniert für beide):

  1. mit dem Boost Unit Test Adapter
  2. oder durch Erstellen einer Win32-Konsolenanwendung ( hier ) und Ersetzen der Hauptfunktion durch eine Funktion zum Testen von Boost-Einheiten ( hier ).

Hier sind die Schritte, die ich befolgt habe, um beide Projekte zum Laufen zu bringen:

Laden Sie zunächst die gewünschte Boost-Version herunter (z. B. boost_1_57_0 ). Sie können entweder boost mit den korrekten Binärdateien herunterladen (kompiliert mit msvc v140) oder die Binärdateien selbst extrahieren, indem Sie die folgenden Befehle über die Befehlszeile ausführen:

  1. bootstrap.bat
  2. "C:\Programme (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
  3. bjam --clean
  4. bjam -j4 --debug-symbols = on --build-type = komplettes Toolset = msvc-14.0-Threading = Multi-Laufzeit-Link = gemeinsam verwendet Adressmodell = 32

Dabei gibt msvc-14.0 an, dass die Version von Visual Studio 2015 erforderlich ist (VS 2015 = v14.0 = v140), und address-model = 32 gibt an, dass Plattform 32 erforderlich ist (dies kann jedoch auch der Fall sein.) erledigt für 64 bit).

Wenn Sie über die Binärdateien verfügen, wechseln Sie zu Visual Studio und wählen Sie das erstellte Boost Unit Testing-Projekt aus. Gehen Sie zu Projekteigenschaften> Konfiguration (aus dem Hauptmenü) und wählen Sie die folgenden Optionen:

  • Setzen Sie "General> Platform Toolset" auf Visual Studio 2015 (v140). 

  • Geben Sie den Pfad zum Boost-Ordner (z. B. C:\boost_1_57_0) und den Pfad zum Unterordner mit den Binärdateien (z. B. C:\boost_1_57_0\stage\lib) an:

    • "C\C++> Zusätzliches Include-Verzeichnis
    • und "Linker> Zusätzliche Bibliotheksverzeichnisse".
1
Aciel

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

Eigenschaften → Linker → Allgemein → Zusätzliche Bibliotheksverzeichnisse $ (BOOST)\stage \x64\ lib

0
Dmitry Ivanov

Ich hatte das gleiche Problem hier gemeldet. Ich habe das Problem mit dem Verschieben der mainTest.cpp aus dem Unterordner src/mainTest/in den Hauptordner src /.__ gelöst. Ich denke, das war auch Ihr Problem. 

0
fiorentinoing

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

In meinem Fall war bootstrap/bjam für das alte vererbte Projekt nicht verfügbar (Bibliotheken wurden vorkompiliert und für SCM festgelegt). Bibliotheken hatten keine VC oder BOOST-Versionierung in ihren Dateinamen, zB: libboost_regex-mt-sgd.lib, jedoch wurde Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib irgendwie automatisch ausgelöst.

Behoben, indem der nicht versionierte Dateiname manuell hinzugefügt wurde:

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

und Blacklisting der ...vc120-mt-sgd-1_55.lib in

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