2013-08-13 6 views
6

es scheint, dass ich das Offensichtliche nicht sehen kann. Ich wollte ein paar Boost-Bibliothek Funktionen für mein Projekt verwenden, und weiß, dass ich diese netten Fehler bin immer ganz plötzlich: finden SieUndefinierter Verweis auf 'boost :: system :: generic_category()'?

Linking CXX executable ATFOR CMakeFiles/ATFOR.dir/stdafx.cc.o: In function __static_initialization_and_destruction_0(int, int)': stdafx.cc:(.text+0x3c): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x48): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x54): undefined reference to boost::system::system_category()' CMakeFiles/ATFOR.dir/Main.cc.o: In function __static_initialization_and_destruction_0(int, int)': Main.cc:(.text+0x29d): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2a9): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2b5): undefined reference to boost::system::system_category()' collect2: error: ld returned 1 exit status

Hier meine CMakeLists.txt, Kopf- und Haupt: http://pastie.org/8231509
Wie Sie können Sehen Sie, ich habe viel versucht mit den CMakeLists herumzuspielen und ich bin mir ziemlich sicher, dass ich alle Header habe, die mein Projekt benötigt. Wie auch immer, ich hatte noch nie solche Fehler und ich schätze wirklich alle Vorschläge/Lösungen über das, was hier falsch ist, da ich keine Ideen für jetzt habe. Danke im Voraus.

Antwort

13

Sie müssen die Systembibliothek explizit hinzufügen, um es in Ihrem Programm

find_package(Boost REQUIRED COMPONENTS system) 
#          ^^^^^^ this :) 

Dies gilt auch für andere Boost-Bibliotheken durchgeführt werden müssen verknüpft werden, die separat gebaut werden (regex, Gewinde, etc.) (see here) .

+0

Das hat den Fehler nicht behoben:/ – Auberotte

+2

Cmake sagt, dass es die libs für Dateisystem, System, ... gefunden hat, aber wenn ich 'make' dort ist immer noch ein Linking-Fehler ist, installierte ich libboost-1.53.0- All-Dev, also sollte ich alles haben was ich brauche. Gibt es eine Überschrift für boost :: system, die ich einbeziehen muss? Nicht gefunden – Auberotte

7

Ok für die Interessenten, war die Antwort von Mark Garcia ein guter Ruf, aber was wichtiger ist, dass Sie explizit die Libs verknüpfen müssen Sie von Boost wollen wie

TARGET_LINK_LIBRARIES(ATFOR ${OpenCV_LIBS} curl ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})

Alle anderen Optionen habe ich versucht, und lies über mich hat nicht funktioniert, weiß nicht warum, aber ich hoffe, das hilft jemandem.

11

Die Libelle "system" fehlt in der Verknüpfungsstufe. Meine Konfiguration ist wie folgt und es behebt den Fehler:

find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem) 

include_directories(... ${Boost_INCLUDE_DIRS}) 

link_directories(... ${Boost_LIBRARY_DIRS}) 

target_link_libraries(... ${Boost_LIBRARIES}) 

Beachten Sie, dass mit nur

find_package(Boost 1.55.0 REQUIRED) 

funktioniert nicht als ${Boost_LIBRARIES} dann nicht verfügbar sein wird.

+1

Super hilfreich. Vielen Dank. +1. In meinem Fall musste ich nur 'find_package (Boost REQUIRED system)' schreiben. Ich brauche (noch) kein Dateisystem. –

+1

Obwohl diese Frage nichts mit meinem Problem zu tun hatte, entschied ich mich, die Antworten hier durchzusuchen, und Ihre Antwort ließ mich erkennen, dass ich 'Dateisystem' brauchte, das mein Problem schließlich löste. Vielen Dank. +1. – rayryeng

2

Überprüfen Sie, ob Sie den richtigen Build (gcc, msvc ...) Ihrer Boost-Bibliotheken haben. Ich hatte diesen Fehler, als ich versuchte, ein Projekt mit mingw mit Bibliotheken zu verbinden, die für msvc gebaut wurden. Wenn es anders ist, erstellen Sie es für die Plattform, die Sie in Ihrem Projekt verwenden.

Das erste Mal, als ich Boost verwendet habe, habe ich es mit Standardparametern erstellt, was zu Bibliotheken führte, die für msvc gebaut wurden, obwohl ich mingw für mein Projekt verwendete. Allerdings fand CMake Header und Bibliotheken und alles schien in Ordnung zu sein, bis ich anfing, Bibliotheksfunktionen zu verwenden und zu kompilieren, was zu einem von OP erwähnten Fehler führte.

Wiederaufbau boost zu toolset=gcc löste es (ich war Windows, CMake + MinGW).

Verwandte Themen