C++ CodeLite 启用多线程?

Posted

技术标签:

【中文标题】C++ CodeLite 启用多线程?【英文标题】:C++ CodeLite Enable Multithreading? 【发布时间】:2016-03-13 13:28:46 【问题描述】:

当我尝试编译任何在 CodeLite 中使用多线程的程序时,我遇到了一些奇怪的行为。

我得到错误:

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

经过一些快速的谷歌搜索后,我发现我必须在编译器选项中添加“-pthread”。

注意:CodeLite 将 -l 放在库前面,所以它确实使用 -lpthread

清理并重建项目后,我仍然收到错误消息。据我所知,构建日志看起来不错?

真正令人沮丧的部分是当我通过命令行手动编译它时,它工作得很好。

我已经搜索过了,但似乎没有一个解决方案适合我?也许我在某个地方错过了一步?

这是我的测试代码。 我还应该注意我使用的是 Ubuntu14.04 和 CodeLite 9.1.0

#include <iostream>
#include <string>

#include <thread>

void test()

    std::cout << " Look it works! \n";


void int main(int argc, char** argv)

    std::thread thrd_1 = std::thread(test);
    thrd_1.join();

    return 0;

任何帮助将不胜感激!

【问题讨论】:

您在 IDE 中链接到 pthread?我使用:-pthread -lpthread -Wl,--no-as-needed.. 您的命令行有 -lpthread,但您的 IDE 屏幕截图没有显示链接器选项。 @Brandon 啊,对不起,我也在链接-lpthread 我会做一个快速编辑。我也尝试过-Wl,--no-as-needed 作为编译器选项?可能是我放错地方了? 【参考方案1】:

您在编译器选项中传递了-pthread。你需要通过它 在链接器选项中,以及您不需要的链接器选项中 将pthread 指定为库。 -pthread 选项表示 在这个平台上做任何链接 posix 线程库的事情

$ g++ -c -O0 -std=c++11 -o main.o main.cpp
$ g++ -o threadtest -pthread main.o
$ ./threadtest
 Look it works!

【讨论】:

完美!谢谢,我很高兴它是如此简单!

以上是关于C++ CodeLite 启用多线程?的主要内容,如果未能解决你的问题,请参考以下文章

c++ 多线程与c多线程有啥区别?

如果 ANSI C++ 不支持多线程,非托管 C++ 应用程序如何实现多线程?

C++多线程怎么实现

vs设置多线程编译的数量

C++多线程问题

C++多线程编程