2012-04-06 16 views
-3

Ich versuche, den Boost-Timer zu kompilieren und es wirft Fehler, die ich nicht verstehe. Es macht mich denken, die Timer-Bibliothek atm gebrochen wird:Boost-Timer kompiliert nicht

#include <string> 
#include <boost/lexical_cast.hpp> 
#include <boost/timer/timer.hpp> 

int main(int argc, char **argv) { 
// auto_cpu_timer t; 
    std::cout << boost::lexical_cast<std::string>(2.0) << std::endl; 

    return 0; 
} 

Ohne die # include für timer.hpp es kompiliert. Mit ihm wirft es die folgenden Fehler:

Invoking: GCC C++ Linker 
g++ -Lsrc -o "timetest" ./src/main.o 
./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: *** [timetest] Error 1 

Bedeutet dies, dass die Timer-Bibliothek atm busted ist? Ich benutze Boost 1.49.0.

Danke!

+1

Ist es wirklich zu viel für ein wenig Google-Fu zu fragen? Wir haben hier tausende Fragen undefinierter Referenzen. Sie sind alle gleich. – pmr

+0

Haben Sie das Programm direkt kopiert oder eingegeben? Sie scheinen zu fehlen, zumindest, '#include '. –

+0

@pmr Ich habe ein paar Minuten von Google und Stackoverflow, aber meine Abfragen waren zu spezifisch, denke ich. Mein Fehler! –

Antwort

5

Angenommen, Sie verwenden gcc, versuchen Sie, -lboost_system zu Ihrer Compiler-Befehlszeile hinzuzufügen, um mit dieser Bibliothek zu verknüpfen.

+0

Ich denke, dass ich mich immer noch mit Includes und Bibliotheksverknüpfungen vermische. Funktioniert jetzt, danke! –

+0

auch -lboost_timer – xinthose

0

Sie müssen auch die Basis-Boost-System-Header enthalten. Überprüfen Sie eines der Beispiele für die Standardheader, die Sie benötigen.

+0

Dies ist nicht über Header, aber Verknüpfung Bibliotheken –

+0

Woops, habe nicht gesehen, es war ein Linker-Fehler. Letztes Mal versuche ich, die SO-Mobile-App zu verwenden, um eine Frage zu beantworten = \ –

2

Diese Fehler beziehen sich nicht auf die Boost Timer-Bibliothek und nein, die Bibliothek ist nicht beschädigt. Wie diese introductory material gibt an,

Boost.Timer als separat kompilierte Bibliothek implementiert, so dass Sie Binärdateien in einem Ort installiert werden müssen, die von Ihrem Linker gefunden werden kann.

... und fügen Sie die entsprechenden Bibliotheken als Befehlszeilenargumente (mit -lLIBNAME), wenn der Compiler den Aufruf oder in Ihre Projektkonfiguration hinzufügen, wenn ein IDE, CMake oder Makefiles verwenden. Stellen Sie sicher, dass Sie zuerst die Details verstehen, die in der Boost Getting Started guide besprochen werden, bevor Sie billige Bemerkungen machen.

0

Sie vergessen, boost_system zu verknüpfen. So:

g++ -Lsrc -o "timetest" ./src/main.o -lboost_system 

wird fein