相关疑难解决方法(0)

编译时-pthread标志的重要性

在各种多线程C和C++项目中,我看到-pthread标志应用于编译和链接阶段,而其他人根本不使用它,只是传递-lpthread给链接阶段.

有没有危险没有编译和链接-pthread国旗 - 即-pthread实际做什么?我主要对Linux平台感兴趣.

c c++ linux pthreads

138
推荐指数
2
解决办法
8万
查看次数

g++ - 为什么在使用 std::thread 时必须传递“-pthread”选项?

我只是想了解 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 使用?或者我应该将其报告为错误?

谢谢。

c++ multithreading g++ pthreads c++11

13
推荐指数
1
解决办法
2510
查看次数

标签 统计

c++ ×2

pthreads ×2

c ×1

c++11 ×1

g++ ×1

linux ×1

multithreading ×1