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

Posted

技术标签:

【中文标题】链接时间优化与多线程支持冲突【英文标题】:Link Time Optimization conflicting with multithreading support 【发布时间】:2014-06-17 12:52:42 【问题描述】:

我在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 异常而失败。

问题:

这种行为是有意的(修复方法是什么?)还是一个错误?

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

【问题讨论】:

你的链接器是什么? @quantdev 我想那是 GNU ld(用于 Ubuntu 的 GNU Binutils)2.24.51.20140612(实际上我从来没有关心过链接器,所以我有点像个菜鸟) 【参考方案1】:

尝试添加这个参数:

-Wl,--no-as-needed

如果有帮助,那就是 gcc 错误:https://***.com/a/19463892/280758

【讨论】:

确实有帮助。谢谢:)

以上是关于链接时间优化与多线程支持冲突的主要内容,如果未能解决你的问题,请参考以下文章

多线程与多进程

2018年线程与多线程面试必知必会内容

并发编程:线程与多线程必知必会

泥瓦匠聊并发编程:线程与多线程必知必会(基础篇)

[面向对象与多线程综合实验]数据挖掘系统

sqlite与多线程