以下是我的第一个多线程程序。但在编译时,出现链接错误。错误消息的一部分:
std::thread::thread<void (&)(int), int&>(void (&)(int), int&):
test.cpp (.text._ZNSt6threadC2IRFviEJRiEEEOT_DpOT0_[_ZNSt6threadC5IRFviEJRiEEEOT_DpOT0_]+0x33): undefined reference pthread_create
collect2: error ld return 1
#include<thread>
void f(int i) {}
int main() {
std::thread t(f, 1);
t.join();
return 0;
}
答案1
您需要使用-pthread
作为编译选项进行编译。
我使用这个来编译你的代码(虽然我添加了-Wall
向我提供所有警告通知的功能):
g++ -pthread -out foo.exe foo.cpp
(foo.cpp
我使用的包含您的代码的输入文件名在哪里)
答案2
即使您的程序使用了 c++11 的线程功能,您也需要指定“-pthread”才能成功编译您的程序。
请阅读以下帖子以获取更多信息 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763369
答案3
我已经修复了同样的问题(对 Pthread_create 的未定义引用)所以问题不在于你的代码,而是在 G++ 编译器中生成目标文件时遗漏的参数
void threadFun()
{
cout<<"\n"<<" "<<"INSIDE THREAD"<<"\n";
}
int main()
{
thread t1(threadFun);
t1.join();
return 0;
}
问题如下:
这是我修复它的方法:
答案4
你可以看看这个例子:
https://mockstacks.com/Cpp_Threading
#包括 #包括 #包括
使用命名空间 std;
// 我们想要在新线程上执行的函数。void task1(string msg) { cout << "task1 says: " << msg; }
int main() { // 构造新线程并运行。不阻止执行。thread t1(task1, "Hello");
// 做其他事情...
// 使主线程等待新线程完成执行,因此阻止其自身的执行。t1.join();}