首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态编译p线程

静态编译p线程
EN

Stack Overflow用户
提问于 2014-08-26 22:45:29
回答 1查看 2.3K关注 0票数 2
代码语言:javascript
复制
 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

我以前注意到了这个错误,但是我已经链接到它了,所以我认为我不应该有这个错误。

请注意,我在一台非常老的计算机上运行这个程序,因为我没有能力在上面安装软件包,所以glibc版本根本不支持用于线程处理的C++11。

我得到这个错误的测试是

代码语言:javascript
复制
#include<iostream>
#include<thread>

void hello(){
    std::cout<< "Hello Concurrent World\n";
}
int main() {
    std::thread t(hello);
    t.join();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-26 23:30:00

问题是libp线程没有被使用,所以真正的pthread_create没有链接到,而您的程序只是在glibc中调用存根pthread_create,它返回EPERM

解决方案是强制链接器使用libp线程中的所有符号,即使它认为不需要它们,这是通过以下方式完成的:

代码语言:javascript
复制
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive

(注:-lpthread而非-pthread)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25516343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档