链接时间优化与多线程支持冲突

时间:2014-06-17 12:52:42

标签: c++ multithreading c++11 g++ lto

正如我在g++-4.9中读到的关于改进链接时间优化支持的内容,我想尝试一下。遗憾的是,我在运行时获得了例外情况,特别是std::system_errore.what() == Enable multithreading to use std::thread: Operation not permitted

现在我通常知道如何修复该错误:将-pthread添加到我的编译器调用中,但事实上,我已经有了这个参数!

我的示例代码是:

#include <thread>

int main()
{
   std::thread t([](){}); // do nothing in a thread!
   t.join();              // wait for nothing to be done
}

编译(X为7,8或9)

g++-4.X -std=c++11 -pthread test.cpp -o thread_test_fine

按预期完美运行,没有运行时错误。

然而,

g++-4.X -std=c++11 -pthread -flto test.cpp -o thread_test_runtime_error

system_error例外而失败。

问题:

这种行为是针对的(修复了什么?)还是一个bug?

(在此问题出现之前:我的编译器都是用--enable-threads=posix)构建的

1 个答案:

答案 0 :(得分:2)

尝试添加此参数:

-Wl,--no-as-needed

如果它有帮助那么它就是gcc错误:https://stackoverflow.com/a/19463892/280758