Linux静态编译之lpthread库踩坑记录: -static静态编译后,执行程序出现段错误

动态编译正常运行,静态编译后出现段错误
1、动态编译正常,如下图:

g++ SDAmqpev.cpp -lamqpcpp -std=c++11 -lev -lpthread -ldl

在这里插入图片描述
2、静态编译出现断段错误,如图:

g++ SDAmqpev.cpp -lamqpcpp -std=c++11 -lev -lpthread -ldl -static

Linux静态编译之lpthread库踩坑记录: -static静态编译后,执行程序出现段错误_第1张图片
3、GDB排查问题
Linux静态编译之lpthread库踩坑记录: -static静态编译后,执行程序出现段错误_第2张图片
看上图可知,thread库有问题了!
你可以不使用std:thread这个,改为其他,或者使用下面这个方式编译。

4、解决办法:编译条件加入这个**-Wl,–whole-archive -lpthread -Wl,–no-whole-archive**

g++ SDAmqpev.cpp -lamqpcpp -std=c++11 -lev -ldl -static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive

Linux静态编译之lpthread库踩坑记录: -static静态编译后,执行程序出现段错误_第3张图片
PS:在某些地方libpthread. a所有的对象链接在一起,因此这将只是在这个地方可以工作,在其他则需要通过这个条件编译
-Wl,- whole-archive -lpthread -Wl,- no-whole-archive。
简单来说就是:上面这个条件开启后,所有的符号都链接过来,不管你用没用。
link statically maybe not a good idea.

你可能感兴趣的:(Linux,linux,运维)