-static -lpthread静态编译,运行段错误的问题

godmaycry 2017-12-05 03:08:15
代码中使用了std::thread,静态编译后,运行会报段错误(Segmentation fault)。
gdb调试发现是std::thread的问题,请问除了使用boost::thread代替外,还有其他的解决方法吗?
注:不要问我为什么非要静态编译。
...全文
396 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
godmaycry 2017-12-05
  • 打赏
  • 举报
回复
引用 8 楼 FancyMouse 的回复:
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive 还得把不是lpthread的whole archive给关了
感谢,解决问题。
FancyMouse 2017-12-05
  • 打赏
  • 举报
回复
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive 还得把不是lpthread的whole archive给关了
FancyMouse 2017-12-05
  • 打赏
  • 举报
回复
-Wl,--whole-archive -lpthread
paschen 2017-12-05
  • 打赏
  • 举报
回复
引用 5 楼 godmaycry 的回复:
引用 4 楼 paschen 的回复:
http://www.linuxdiyf.com/linux/16086.html
我给你一个简单代码吧
//main.cpp#include <iostream>#include <thread>using namespace std;void Test(){    for (auto i=0; i<100; ++i){        cout<<i<<endl;    }}auto main()->int{    thread t(Test);    t.join();    return 1;}
编译参数:g++ -std=c++1z -O3 -Wall -static main.cpp -o test -lpthread
那你上网搜索一下,我现在没你的环境,VS下调试倒是没问题
godmaycry 2017-12-05
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
http://www.linuxdiyf.com/linux/16086.html
我给你一个简单代码吧

//main.cpp
#include <iostream>
#include <thread>

using namespace std;

void Test(){
    for (auto i=0; i<100; ++i){
        cout<<i<<endl;
    }
}

auto main()->int{
    thread t(Test);

    t.join();

    return 1;
}
编译参数: g++ -std=c++1z -O3 -Wall -static main.cpp -o test -lpthread
paschen 2017-12-05
  • 打赏
  • 举报
回复
godmaycry 2017-12-05
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
Segmentation fault 通常不是库函数的问题,而是你代码问题造成的原因,即使在非静态编译下看似没问题也不足以说明你代码没问题
引用 2 楼 zhao4zhong1 的回复:
多线程需要加锁。
统一做个回复,我不是小白,代码问题/多线程问题,我都清楚,建议你们写一个简单的线程,在Linux下静态编译试试,看看会不会出现我说的问题。
赵4老师 2017-12-05
  • 打赏
  • 举报
回复
多线程需要加锁。
paschen 2017-12-05
  • 打赏
  • 举报
回复
Segmentation fault 通常不是库函数的问题,而是你代码问题造成的原因,即使在非静态编译下看似没问题也不足以说明你代码没问题

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧