2011-01-17 4 views
2

私が作成したThreadManagerクラス用の簡単なテストプログラムをビルドしようとしています。下の出力からわかるように、私のThreadManagerとメインコードはオブジェクトファイルにコンパイルされているようですが、実行可能ファイルを作成すると、pthreadクラスからの関数への適切な参照が見つからないようです。私は何が欠けていますか?実行ファイルをビルドするときにpthreadライブラリが見つかりませんか?

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 

おかげで、

答えて

7

pthreadライブラリへのリンク。

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

ありがとうございます!それは...私はそれを得ることはできません、なぜ私は実行ファイルを作成しているときにフラグが必要ですが、私はオブジェクトファイルを作成していませんか? – Kaigi

+0

_final_実行可能ファイルをリンクするときは、ライブラリにリンクする必要があります。オブジェクトファイルには依存情報は含まれていません。 – ismail

関連する問題