简单的 C++ 线程程序无法编译

简单的 C++ 线程程序无法编译

以下是我的第一个多线程程序。但在编译时,出现链接错误。错误消息的一部分:

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();}

相关内容