链接时间优化与多线程支持冲突
Posted
技术标签:
【中文标题】链接时间优化与多线程支持冲突【英文标题】:Link Time Optimization conflicting with multithreading support 【发布时间】:2014-06-17 12:52:42 【问题描述】:我在g++-4.9
中读到了改进的链接时间优化支持,我想试一试。可悲的是,我在运行时遇到异常,特别是std::system_error
和e.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
【讨论】:
确实有帮助。谢谢:)以上是关于链接时间优化与多线程支持冲突的主要内容,如果未能解决你的问题,请参考以下文章