如何使 CDT/Eclipse 与 C++11 线程一起工作
How to make CDT/Eclipse work with C++11 threads?
我试图在Eclipse中测试一个C++11线程的例子。但是我在运行程序时收到此消息:
在抛出"std::system_error"实例后终止调用 what(): 不允许操作'
我的系统:ubuntu + gcc 4.7
程序:
#include <iostream>
#include <thread>
void worker()
{
std::cout << "hello from worker" << std::endl;
}
int main(int argc, char **argv)
{
std::thread t(worker);
t.join();
}
。是的,我把-std=c++11
和-pthread
放在C/C++ Build -> Settings -> Tool Settings -> Cross G++ Compiler -> Miscellaneous -> Other Flags
里面.
有什么意见吗?
这个问题由Jonathan Wakely的评论解决了。
我在C/C++ Build -> Settings -> Tool Settings -> Cross G++ **Linker** -> Miscellaneous -> Other Flags
中添加了-pthread
,程序运行正常。
谢谢乔纳森。
要在 Eclipse 中工作 C++11 std::thread
,需要在编译时提供-pthread
选项。然而,这还不够。在我的 Ubuntu 14.04 中,下面的 Eclipse Kepler 和 g++4.9 使其工作:
- 右键单击项目并选择"属性"
- 转到"C/C++构建">"设置">(选项卡)"工具设置"
- 首先选择"交叉 G++ 编译器">"杂项">"其他标志";
并添加-std=c++11
后-pthread
- 第二个选择"交叉 G++ 链接器">"库";
并添加pthread
(等效到命令行-lpthread
)
最后重新编译项目;错误应该消失了。
还要记住,如果你使用,std::thread
那么它的对象必须在某处join()
。否则,您可能会收到以下运行时错误:
终止调用而不显示活动异常
-
转到 C/C++ 常规>预处理器包含路径等的项目>>属性>提供程序> CDT GCC 内置编译器设置,并将
-std=c++11
附加到编译器规范。您还可以对转到窗口>首选项> C/C++> 生成>设置>发现的所有项目执行此操作,并将
-std=c++11
附加到 CDT GCC 内置编译器设置规范。${COMMAND} ${FLAGS} -E -P -v -dD -std=c++11 "${INPUTS}"
-
> C/C++ 生成>设置> GCC C++编译器>杂项>其他标志的工具>设置项目属性,请添加
-pthread -std=c++11 -Wl,--no-as-needed
:-c -fmessage-length=0 -pthread -std=c++11 -Wl,--no-as-needed
-
> C/C++ 生成>设置> GCC C++链接器>杂项>链接器标志>的工具设置项目属性,添加
-pthread -std=c++11 -Wl,--no-as-needed
-pthread -std=c++11 -Wl,--no-as-needed
- C++ 11 线程在分离后会自动销毁吗?
- 在 C++11 线程中,std::mutex 对内存可见性有什么保证?
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- C++11 线程段错误
- C++11 线程不以 SDL 结尾
- 如何调试此C 11线程代码
- C 11线程汇编错误传递字符串作为复制的引用
- 如何等待多个线程完成(使用 c++11 线程)
- 将元素从C 11线程安全地添加到向量中
- C++11 线程池示例与错误
- 为什么添加函数在C 11线程中无效
- Eclipse c++11 线程支持不起作用
- 如何定期唤醒 C++ 11 线程
- C 11线程不起作用
- C++11线程实现后端
- c++11 线程类如何使用类成员函数
- C++11 线程:在构造函数中启动并在析构函数中加入
- C++ 11 线程简单示例
- c++11线程、SFML和代码::块
- C++11线程提升容器