Eclipse中的线程和C++11

3

我的目标是创建多线程程序,但我甚至无法在ECLIPSE CDT上执行一个简单的线程。我的工具是: ECLIPSE 3.8.1 CDT Ubuntu 13.10

我注意到有很多类似的问题。我尝试了其他解决方案,但都无法解决我的问题。

当我在Eclipse CDT中输入代码时,Eclipse无法“解析”符号“thread”,但它可以找到头文件“thread”。Mutex也无法解析。此外,在构建后,运行程序时,Eclipse会返回:

"terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted"

一些额外的注释:

我可以使用以下命令在终端中编译和执行代码: 'clang++ c.cpp -pthread -std=c++11' 但是...... 'g++ c.cpp -pthread -std=c++11'编译并 产生与上述相同的错误。因此,看起来这是编译器问题。我开始在Eclipse CDT中使用clang++编译器在新项目中编写代码,现在出现了与上述相同的未解决“thread”并产生错误的情况。因此,我认为我在Eclipse中设置了一些错误的设置、路径或标志。

include <iostream>
include <thread>

using namespace std;
void p1(){
    cout<<"process 1 is processing"<<endl;
}

int main() {
    thread t1(&p1);

    cout<<"Hello from main()"<<endl;
    t1.join();
    return 0;
}
1个回答

3
我曾经也遇到了同样的问题,但我终于解决了。以下是我的做法:
1)为C++构建添加-std=c++11。右键单击项目,选择属性,然后:C/C++ Build -> Settings -> GCC C++ Compiler -> Miscellaneous(最后一个选项)
在其他标志中添加-std=c++11。我的其他标志现在看起来像这样:-c -fmessage-length=0 -std=c++11,但你的可能略有不同。
2)添加一些链接器选项。在与上述相同的视图(C/C++ Build -> Settings)中,选择GCC C++ Linker选项,然后转到Miscellaneous(倒数第二个选项)。添加以下链接器标志(对我而言该字段为空):-Wl,--no-as-needed -pthread。点击应用。
3)添加宏。再次从项目属性菜单(项目->右键单击->属性)中导航至C/C++ General -> Paths and symbols -> Symbols。选择GNU C++。使用名称__GXX_EXPERIMENTAL_CXX0X__添加一个没有值的符号。再次点击应用。
4)导航至C/C++ General -> Preprocessor Include paths。选择提供者选项卡。在此选项卡中,仅保留以下两个选项:CDT GCC Built-in Compiler Settings和CDT Managed Build Setting Entries。选择CDT GCC Built-in Compiler Settings取消复选框Share setting entries between projects(全局提供程序),现在标记为Command to get compiler specs的文本框应该已启用。在此文本框中添加好旧的-std=c++11。对我而言,现在的文本看起来像这样:${COMMAND} -E -P -v -dD ${INPUTS} -std=c++11。最后再次点击应用。
5)重新构建项目的索引。为此,请右键单击项目->Index->Rebuild。
按照这些步骤,我能够编译一个C++11多线程程序,并执行它,Eclipse CDT也没有报告任何错误,并且在自动完成方面也很有帮助。不幸的是,这个设置必须分别针对Release和Debug进行(或者至少我还没有找到共享的方法)。希望这可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接