2011-01-17 2 views
2

Ich versuche, ein einfaches Testprogramm für eine von mir erstellte ThreadManager-Klasse zu erstellen. Wie Sie in der Ausgabe unten sehen können, scheinen mein ThreadManager und mein Hauptcode in Objektdateien zu kompilieren, aber dann, wenn ich die ausführbare Datei erstelle, scheint es keine richtigen Verweise auf irgendeine der Funktionen der pthread Klasse zu finden. Was vermisse ich?Pthread-Bibliothek nicht gefunden, wenn ausführbare Datei erstellt?

g++ -c -o ThreadManager.o ThreadManager.cpp 
g++ -c -o main.o main.cpp 
g++ -o tm_test ThreadManager.o main.o -g -lm 

ThreadManager.o: In function `ThreadManager::Create(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void* (*)(void*))': 
ThreadManager.cpp:(.text+0x276): undefined reference to `pthread_create' 
ThreadManager.o: In function `ThreadManager::Create(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void* (*)(void*), void*)': 
ThreadManager.cpp:(.text+0x4a3): undefined reference to `pthread_create' 
ThreadManager.o: In function `ThreadManager::Create(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void* (*)(void*), void*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': 
ThreadManager.cpp:(.text+0x70b): undefined reference to `pthread_create' 
ThreadManager.o: In function `ThreadManager::Cleanup(int)': 
ThreadManager.cpp:(.text+0x8d4): undefined reference to `pthread_join' 
ThreadManager.cpp:(.text+0xa5f): undefined reference to `pthread_join' 
ThreadManager.cpp:(.text+0xbe1): undefined reference to `pthread_kill' 
ThreadManager.o: In function `ThreadManager::Resurrect()': 
ThreadManager.cpp:(.text+0xe8c): undefined reference to `pthread_create' 
ThreadManager.o: In function `ThreadManager::Kill(int)': 
ThreadManager.cpp:(.text+0x125f): undefined reference to `pthread_cancel' 
ThreadManager.cpp:(.text+0x1285): undefined reference to `pthread_join' 
ThreadManager.o:(.rodata+0x1a0): undefined reference to `pthread_cancel' 
main.o:(.rodata+0x5c): undefined reference to `pthread_cancel' 
collect2: ld returned 1 exit status 
make: *** [tm_test] Error 1 

Danke,

Antwort

7

Link zur pthread Bibliothek;

g++ -c -o ThreadManager.o ThreadManager.cpp 
g++ -c -o main.o main.cpp 
g++ -o tm_test -lm -lpthread 
+0

Danke! Das hat es getan ... Ich verstehe es aber nicht, warum sollte ich das Flag brauchen, wenn ich die ausführbare Datei erstelle, aber nicht, wenn ich die Objektdateien erstelle? – Kaigi

+0

Sie müssen eine Verknüpfung zu den Bibliotheken herstellen, wenn Sie die ausführbare _final_-Datei verknüpfen. Eine Objektdatei enthält keine Abhängigkeitsinformationen in sich, die ausführbare Datei. – ismail

Verwandte Themen