使用g ++编译多线程代码(-Wl, - no-as-need not working)

时间:2014-03-23 16:31:55

标签: c++ linux multithreading ubuntu g++

我的问题实际上是在这里描述的:Compiling multithread code with g++。 但是关于使用“-Wl, - no-as-needed”来解决这个问题的答案并不适用于我。

我已经在不同的顺序中添加了-Wl,--no-as-needed -pthread -std=c++0x,但我仍然得到:

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

怎么办?

Info: 
Ubuntu 12.04LTS
Running Eclipse CDT
g++ v4.8.1 

修改 我试着用-Wl,--no-as-needed -lpthread -std=c++0x建造而没有运气。 代码:

#include <iostream>
#include <chrono>
#include <thread>

void foo()
{
    std::cout << "Thread 1 created.." << std::endl;
}

int main()
{
    std::thread t1(foo);

    t1.join();

    return 0;
}

修改: 所以不幸的是,你的建议都没有奏效。我决定改用Boost。

2 个答案:

答案 0 :(得分:4)

  1. -Wl,--no-as-needed而非-Wl,--no_as_needed,您使用连字符
  2. -pthread是编译器的标志,而不是链接器,链接器的右侧是-lpthread
  3. Mingw并不总是带有相同的线程库,使用MinGW进行多线程处理有多个选项,你应该根据你的MinGW构建来记录这个。

答案 1 :(得分:1)

g++  filename.c -std=c++11 -lpthread

我正在用上面的命令编译你的代码,它的工作完美。