Ich versuche, Boost
Bibliotheken in mein Projekt aufzunehmen, und habe Probleme damit. Ich bin auf Ubuntu 12.10 mit Codeblocks IDE und habe versucht, die Bibliotheken manuell zu installieren, indem ich Anweisungen von der Site gelesen habe, aber es wurden Fehler mit dem Header sowie vor der Verwendung zu erstellende Bibliotheken angezeigt.
Ich habe dann die Bibliotheken über terminalby installiert sudo apt-get install libboost-all-dev
. Danach kann ich in meinen Programmen auf Codeblocks folgende Header einfügen. #include <boost/regex.hpp>
Wenn ich jedoch versuche, den Header für die Dateisystembibliothek ( #include "boost/filesystem/operations.hpp"
) einzuschließen, wird folgende Fehlermeldung angezeigt :
/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|
Ich bin nicht sicher, wie ich diesen Fehler beheben soll (speziell in Codeblocks unter Linux). Ich könnte hier wirklich Hilfe gebrauchen.
Compiler: Gcc
Programmcode: Nur versucht, die obige Dateisystemdatei einzuschließen operations.hpp
.
Erstellen Sie ein Protokoll aus Codeblocks:
Build started on: 20-11-2012 at 18:02.53
Build ended on: 20-11-2012 at 18:02.54
-------------- Build: Debug in libopenFrameworks ---------------
Target is up to date.
-------------- Build: Debug in reader1 ---------------
make -s -f Makefile Debug
linking i686 bin/reader1_debug linux
obj/i686Debug/src/testApp.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
obj/i686Debug/src/main.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [bin/reader1_debug] Error 1
Process terminated with status 2 (0 minutes, 1 seconds)
6 errors, 0 warnings
quelle
-lboost_system
an einer bestimmten Stelle in den Einstellungen hinzuzufügen , aber es wurde nicht aufgelöst. Ich bin mir jedoch nicht einmal sicher, ob ich die ganze Linker-Flag-Sache am richtigen Ort gemacht habe. Ein bisschen mehr Detail wäre eine große Hilfe.Boost filesystem library
(operation.hpp im obigen Beitrag)Antworten:
Sie sollten in der
libboost_system
Bibliothek verlinken . Ich bin mir bei Codeblöcken nicht sicher, aber die g ++ - Befehlszeilenoption auf Ihrer Plattform wärequelle
Abhängig von der Boost-Version wird libboost-system mit dem Suffix -mt geliefert, das die Multithreading-Fähigkeit der Bibliotheken angeben soll.
Wenn
-lboost_system
der Linker ihn nicht finden kann, versuchen Sie es-lboost_system-mt
.quelle
-mt
Suffix hatte.Es ist ein Linker-Problem. Fügen Sie den statischen Bibliothekspfad in Ihr Projekt ein.
Öffnen Sie für Qt Creator die Projektdatei
.pro
und fügen Sie die folgende Zeile hinzu:In meinem Fall Ubuntu x86_64:
Öffnen Sie für Codeblöcke die
Settings->Compiler...->Linker
Registerkarte Einstellungen und fügen Sie Folgendes hinzu:Klicken Sie auf das Text-Widget "Bibliotheken verknüpfen" und drücken Sie die OKTaste.
quelle
Ich habe auch nach einer Lösung gesucht und keine der Antworten hat den Fehler behoben. Bis ich die Antwort von "ViRuSTriNiTy" auf diesen Thread gefunden habe: Undefinierter Verweis auf 'boost :: system :: generic_category ()'?
Versuchen Sie gemäß dieser Antwort, diese Zeilen zu Ihrer cmake-Datei hinzuzufügen:
quelle
Diese Antwort hat tatsächlich bei der Verwendung von Boost und cmake geholfen.
Hinzufügen
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
für cmake - Datei.Meine CMakeLists.txt sieht folgendermaßen aus:
quelle
Das gleiche Problem beim Erstellen eines einfachen Boost-Beispiels, das behoben wurde, nachdem ich das g ++ - Compiler-Flag von -std = c ++ 14 in -std = c ++ 11 geändert hatte .
Und mir ist aufgefallen, dass es sich um ein C ++ 11-Beispiel handelt ...
quelle
Ich hatte das gleiche Problem und benutze auch Linux Mint (als Nuduoz). Ich mein Fall Problem wurde gelöst, nachdem ich hinzugefügt
boost_system
habeGCC C++ Linker->Libraries
.quelle
Sie könnten auf ein anderes Problem stoßen. Nach der Installation von Boost unter Linux Mint hatte ich das gleiche Problem. Verknüpfen
-lboost_system
oder-lboost_system-mt
nicht funktioniert, weil die Bibliothek einen Namen hattelibboost_system.so.1.54.0
.Die Lösung besteht also darin, einen symbolischen Link zur Originaldatei zu erstellen. In meinem Fall
Weitere Informationen finden Sie in dieser Frage.
quelle
Wenn die Bibliothek nicht installiert ist, sollten Sie den Ordner für Boost-Bibliotheken angeben:
Beispiel:
quelle
Versuchen
/usr/lib/x86_64-linux-gnu/
ist der Speicherort der Boost-BibliothekVerwenden
find /usr/ -name '*boost*.so'
Sie diese Option, um den Speicherort der Boost-Bibliothek zu ermittelnquelle
funktionierte perfekt unter debian. (Boost C ++ - Bibliotheken, die mit apt-get installiert wurden).
quelle
Nachdem ich die oben beschriebenen Lösungsvorschläge getestet hatte, stellte ich fest, dass nur diese wenigen Zeilen funktionieren würden.
Ich benutze Ubuntu 16.04.
cmake_minimum_required (VERSION 3.13)
Projekt (myProject)
set (CMAKE_CXX_STANDARD 11)
add_executable (myProject main.cpp)
find_package (Boost 1.58.0 ERFORDERLICHE KOMPONENTEN Systemdateisystem)
target_link_libraries (myProject $ {Boost_LIBRARIES})
quelle