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?
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).
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
.
c:\boost_1_57_0
.Gehen Sie dann zur Linkbibliothek über, in der Sie Ihre Probleme hatten.
c:\boost_1_57_0
.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
.b2
und warten Sie, bis es ausgeführt wird.bjam
und warten Sie, bis es ausgeführt wird. Dann wird ein Ordner namens stage
erstellt.c:\boost_1_57_0\stage\lib
.Und du bist gut zu gehen!
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) .
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.
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.
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.
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):
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:
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:
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
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.
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>