C ++ CodeLite启用多线程?

时间:2016-03-13 13:28:46

标签: c++ multithreading stdthread codelite

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

我收到错误:

terminate called after throwing an instance of 'std::system_error'
  what(): Enable multithreading to use std::thread: Operation not premitted.
经过一些快速的谷歌搜索后,我发现我必须在编译器选项中添加“-pthread”。

Image of Codelite Options. Linker Options

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

在我清理并重建项目之后,我仍然会收到错误。据我所知,构建日志看起来很好吗?

Image of CodeLite build log.

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

Compiling manually works

我搜索过,但是这些解决方案似乎都不适用于我?也许我错过了某个地方的一步?

这是我的测试代码。 我还应该注意到我正在使用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;
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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!