C++ 生成可执行文件时未找到pthread库?

C++ 生成可执行文件时未找到pthread库?,c++,makefile,pthreads,C++,Makefile,Pthreads,我正在尝试为我创建的ThreadManager类构建一个简单的测试程序。正如您在下面的输出中所看到的,我的ThreadManager和主代码似乎可以编译成目标文件,但是在创建可执行文件时,它似乎无法从pthread类中找到对任何函数的正确引用。我错过了什么 g++ -c -o ThreadManager.o ThreadManager.cpp g++ -c -o main.o main.cpp g++ -o tm_test ThreadManager.o main.o -g

我正在尝试为我创建的ThreadManager类构建一个简单的测试程序。正如您在下面的输出中所看到的,我的ThreadManager和主代码似乎可以编译成目标文件,但是在创建可执行文件时,它似乎无法从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
g++-c-o ThreadManager.o ThreadManager.cpp
g++-c-o main.o main.cpp
g++-o tm_测试线程管理器.o main.o-g-lm
o:在函数“ThreadManager::Create(std::basic_string,void*(*)(void*)”中:
ThreadManager.cpp:(.text+0x276):对“pthread_create”的未定义引用
o:在函数“ThreadManager::Create(std::basic_string,void*(*)(void*),void*)”中:
ThreadManager.cpp:(.text+0x4a3):对“pthread_create”的未定义引用
o:在函数“ThreadManager::Create(std::basic_string,void*(*)(void*),void*,std::basic_string)”中:
ThreadManager.cpp:(.text+0x70b):对“pthread_create”的未定义引用
ThreadManager.o:在函数“ThreadManager::Cleanup(int)”中:
ThreadManager.cpp:(.text+0x8d4):对“pthread\u join”的未定义引用
ThreadManager.cpp:(.text+0xa5f):对“pthread\u join”的未定义引用
ThreadManager.cpp:(.text+0xbe1):对“pthread\u kill”的未定义引用
ThreadManager.o:在函数'ThreadManager::Resurrect()'中:
ThreadManager.cpp:(.text+0xe8c):对“pthread\u create”的未定义引用
ThreadManager.o:在函数“ThreadManager::Kill(int)”中:
ThreadManager.cpp:(.text+0x125f):对“pthread\u cancel”的未定义引用
ThreadManager.cpp:(.text+0x1285):对“pthread\u join”的未定义引用
ThreadManager.o:(.rodata+0x1a0):对“pthread\u cancel”的未定义引用
main.o:(.rodata+0x5c):对“pthread\u cancel”的未定义引用
collect2:ld返回了1个退出状态
make:**[tm_测试]错误1

谢谢,

链接到
pthread

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

谢谢就这样。。。但是我不明白,为什么我在创建可执行文件时需要这个标志,而在创建对象文件时却不需要这个标志?在链接最终可执行文件时,需要链接到库。对象文件本身不包含依赖项信息,可执行文件不包含。