在各种多线程C和C++项目中,我看到-pthread标志应用于编译和链接阶段,而其他人根本不使用它,只是传递-lpthread给链接阶段.
有没有危险没有编译和链接-pthread国旗 - 即-pthread实际做什么?我主要对Linux平台感兴趣.
我只是想了解 g++ 使用的概念。这是我非常简单的 std::thread 应用程序:
#include <iostream>
#include <thread>
void func() {
std::cout << "Running..." << std::endl;
}
int main()
{
std::thread t(func);
t.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令在 macOs/Xcode 9.0 设置上编译它:
g++ main.cpp -std=c++11
但是我无法使用相同的命令在 Linux 上编译它,据我所知我也必须传递-pthread选项。否则它会给我以下错误:
gcc 版本 7.1.1 20170622(红帽 7.1.1-3)
main.o: In function `std::thread::thread<void (&)()>(void (&)())':
/usr/include/c++/5/thread:137: undefined reference to `pthread_create'
Run Code Online (Sandbox Code Playgroud)
我认为这是不合逻辑的,我什至不应该知道它是通过 pthread 实现 std::thread 类的。为什么我必须-pthread针对 pthread 库传递选项和链接?C++11 不应该让我远离平台特定的细节吗?或者我是否有任何其他替代库,例如 pthread,我可以链接到我的 std::thread 使用?或者我应该将其报告为错误?
谢谢。