Anscheinend kann ich das nicht zum Laufen bringen. Ich habe eine einfache Konsolenanwendung (die von der websocket++
Bibliothek abhängt ) 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 den bjam erstellt, der die Bibliothek erstellt hat, (boost_root)/stage/libs
und den Pfad zu den Bibliotheken mit dem Compiler verknüpft C++/Additionnals includes
.
Wenn ich in (boost_root)/stage/libs
die Datei schaue, libboost_system-vc110-mt-gd-1_51.lib
ist nicht da. Es wird libboost_system-vc110-mt-sgd-1_51.lib
stattdessen aufgerufen .
Irgendeine Idee?
VS2012 developer command prompt
, gehen Sie zu Ihrem Boost-Stammverzeichnis und geben Sie ein. Geben Siebootstrap
dann ein,b2
und Sie sollten einen vollständigen Satz von Bibliotheksdateien erhalten./MD
?Antworten:
Der Parameter C ++ → Allgemein → Zusätzliche Einschlussverzeichnisse dient zum Auflisten von Verzeichnissen, in denen der Compiler nach Header-Dateien sucht.
Sie müssen dem Linker mitteilen, wo nach Bibliotheken gesucht werden soll, zu denen eine Verknüpfung hergestellt werden soll. Um auf diese Einstellung zuzugreifen, klicken Sie im Projektmappen- Explorer mit der rechten Maustaste auf den Projektnamen und dann auf Eigenschaften → Linker → Allgemein → Zusätzliche Bibliotheksverzeichnisse . Geben Sie
<boost_path>\stage\lib
hier ein (dies ist der Pfad, in dem sich die Bibliotheken befinden, wenn Sie Boost mit Standardoptionen erstellen ).quelle
Dies ist der einfachste Weg für einen Amateur wie mich, der C ++ alleine lernt:
Entpacken Sie zuerst die Boost-Bibliothek in ein Verzeichnis Ihrer Wahl. Ich empfehle
c:\directory
.c:\boost_1_57_0
.Gehen Sie dann zur Linkbibliothek, in der Sie Probleme hatten.
c:\boost_1_57_0
.booststrap.bat
(geben Sie nicht das Befehlsfenster ein, warten Sie einfach und schließen Sie nicht das Fenster, in dem ich mein Problem hatte, dessen Lösung zwei Wochen gedauert hat. Nach einer Weilebooststrap
wird das ausgeführt und die gleiche Datei erstellt. aber jetzt mit zwei verschiedenen Namen:b2
undbjam
.b2
und warten Sie, bis es ausgeführt wird.bjam
und warten Sie, bis es ausgeführt wird. Dann wird ein Ordner mit dem Namen erstelltstage
.c:\boost_1_57_0\stage\lib
.Und du kannst loslegen!
quelle
bootstrap.bat
(es dauerte 10-20 Sekunden); d) Geben Sie./b2
wie angegeben ein (es dauerte dann 30-40 Minuten).Ich hatte das gleiche Problem. Dies wurde verursacht, weil ich den Boost mit Visual C ++ 2010 (v100) kompiliert und versehentlich versucht habe, die Bibliothek mit Visual Studio 2012 (v110) zu verwenden.
Daher habe ich die Konfigurationen (in Visual Studio 2012) unter Projekteigenschaften -> Allgemein -> Plataform Toolset geändert und den Wert von Visual Studio 2012 (v110) in Visual Studio 2010 (v100) geändert .
quelle
Noch eine andere Lösung:
Ich war ratlos, weil ich boost_regex-vc120-mt-gd-1_58.lib in meine Eigenschaft Link-> Zusätzliche Abhängigkeiten aufgenommen habe, aber der Link sagte mir immer wieder, dass libboost_regex-vc120-mt-gd-1_58.lib nicht geöffnet werden konnte ( 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 war nicht definiert. Anscheinend enthält die Kompilierung Hinweise zum Einfügen einer Bibliothek, und ohne BOOST_ALL_DYN_LINK wird nach der statischen Bibliothek (mit dem Präfix lib) gesucht, nicht nach der dynamischen Bibliothek (ohne das Präfix lib).
quelle
Ich hatte das gleiche Problem und mein Fehler war, dass ich die Binärdatei boost_1_55_0-msvc-11.0-32.exe für Visual C ++ 2010 installiert hatte, die die Version v100 (Projekteigenschaften-> ConfiguratioProperties-> General-> platformTooset) und nicht v110 hat als visuelles c ++ 2012. Also habe ich boost_1_55_0-msvc-10.0-32.exe heruntergeladen und jetzt ist alles in Ordnung.
quelle
Falls Sie Probleme beim Erstellen von Boost haben oder dies lieber nicht tun möchten, können Sie alternativ die lib-Dateien von SourceForge herunterladen . Über den Link gelangen Sie zu einem Ordner mit komprimierten lib- und dll-Dateien für Version 1.51. Sie sollten jedoch in der Lage sein, den Link zu bearbeiten, um die Version Ihrer Wahl anzugeben. Anscheinend hat der Installer von BoostPro einige Probleme.
quelle
Ich hatte ein ähnliches Problem beim Versuch, Boost-Unit-Tests in Visual Studio 2015 (Community Edition) zu verwenden:
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 Boost entweder mit den richtigen Binärdateien herunterladen (kompiliert mit msvc v140) oder die Binärdateien selbst extrahieren, indem Sie die folgenden Befehle über die Befehlszeile ausführen:
Wobei msvc-14.0 angibt, dass wir die Visual Studio 2015-Version benötigen (VS 2015 = v14.0 = v140), und address-model = 32 angibt, dass wir Plattform 32 benötigen (dasselbe kann jedoch für 64-Bit durchgeführt werden).
Sobald Sie die Binärdateien haben, gehen Sie zu Visual Studio und wählen Sie das von Ihnen erstellte Boost Unit Testing-Projekt aus. Gehen Sie zu Projekteigenschaften> Konfiguration (im Hauptmenü) und treffen Sie die folgenden Optionen:
Stellen Sie das " General> Platform Toolset " auf Visual Studio 2015 (v140) ein.
Fügen 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) in:
quelle
Ich hatte das gleiche Problem hier gemeldet. Ich habe das Problem behoben, bei dem die Datei mainTest.cpp von einem Unterordner src / mainTest / in den Hauptordner src / verschoben wurde. Ich denke, dies war auch Ihr Problem.
quelle
2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib
In meinem Fall war bootstrap / bjam für ein altes geerbtes Projekt nicht verfügbar (Bibliotheken wurden vorkompiliert und in SCM festgeschrieben). Bibliotheken hatten keine VC- oder BOOST-Versionierung in ihren Dateinamen, zB:
libboost_regex-mt-sgd.lib
wurde jedochProcessed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib
irgendwie automatisch ausgelöst.Behoben durch manuelles Hinzufügen des nicht versionierten Dateinamens zu:
und die schwarze Liste der
...vc120-mt-sgd-1_55.lib
inquelle
b2 -j% Kerne% Toolset =% msvcver% Adressmodell = 64 Architektur = x86 Link = statisches Threading = Multi Runtime-Link = gemeinsam genutzt - Build-Typ = minimale Stufe --stagedir = Stufe / x64
Eigenschaften → Linker → Allgemein → Zusätzliche Bibliotheksverzeichnisse $ (BOOST) \ stage \ x64 \ lib
quelle