Ruler501SabayonVM Rationals # g++ -static -static-libgcc -static-libstdc++
-g -O0 -o obj/primitive --std=c++11 testcase.cpp -pthread
&& cd obj && ./primitive 8
terminate called after throwing an instance of 'std::system_error'
what(): Operation not permitted
Aborted
我在使用pthreads之前注意到了这个错误,但是我正在使用它进行链接,所以我认为我不应该有这个错误。
注意我在一台非常老的计算机上运行这个程序,我没有能力安装软件包,所以glibc版本根本不支持C ++ 11用于线程化。
我遇到此错误的测试用例是
#include<iostream>
#include<thread>
void hello(){
std::cout<< "Hello Concurrent World\n";
}
int main() {
std::thread t(hello);
t.join();
}
答案 0 :(得分:6)
问题是libpthread没有被使用,所以真正的pthread_create
没有被链接,你的程序只调用glibc中的stub pthread_create
,返回{{1} }
解决方案是强制链接器使用libpthread中的所有符号,即使它认为它们不是必需的,这可以通过以下方式完成:
EPERM
(注意-Wl,--whole-archive -lpthread -Wl,--no-whole-archive
而非-lpthread
)