我使用C ++ 11的线程库有以下简单程序。它编译但不运行。
#include <iostream>
#include <future>
using namespace std;
double square(int i) {
return i * i;
}
int main() {
future<double> fd = async(square, 2);
double d = fd.get();
cout << d << endl;
return 0;
}
运行程序
terminate called after throwing an instance of 'std::system_error'
what(): Unknown error -1
Aborted (core dumped)
我使用gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)并使用&#34; g ++ -o main3 -std = c ++ 11 -Wall -g main3.cpp -lpthread&#34;进行编译。有谁知道那里发生了什么?
答案 0 :(得分:1)
尝试按如下方式编译程序:
g++ -o main3 -std=c++11 -pthreads -Wall -g main3.cpp
这将添加对多线程的支持,并将为预处理器和链接器设置标志。选项-lpthread
仅在链接时添加Pthread
库,可能不够。
g++ 4.8.2
的手册页说明如下:
<强> -pthreads 强>
使用POSIX线程库添加对多线程的支持。 此选项为预处理器和链接器设置标志。这个 选项不会影响生成的目标代码的线程安全性 由编译器或随其提供的库的编译器。