一次ldconfig导致linux 崩溃的问题
23 Jul 2019
|
|
TL,DR: ldconfig 加载了两次libc.so导致崩溃
编译好了自己的模块,依赖很多动态库,打包
mkdir -p package
cp myserver package
for i in `ldd myserver | awk '{print $3}' | grep "/" | sort | uniq`; do cp $i package; done
tar -czvf package.tar.gz package
把包挪到另一个机器上,试着运行,提示 找不到动态库
error while loading shared libraries: libxxx.so.1.0.0: cannot open shared object file: No such file or directory
搜到了一个解决方案1 先添加到LD_LIBRARY_PATH 然后再ldconfig
但是我执行发现
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD
Segmentation fault
然后后面的命令都会报错,开始我以为是机器问题,然后换了个机器也这样,然后我直接把PWD加到/etc/ld.so.conf里,结果机器立马报错,然后就打不开了。
在此警告,千万不要这么搞,这么搞是全局的,整个机器就挂了,export只是当前shell,所以还好。幸亏我有镜像,重新复原就搞定了。
应该是打包的动态库有问题
后面我逐个排查重试会不会报错
删到libc之后就不会报错了。。。确定了是libc的问题。由于上面的打包脚本会把libc也带上。需要去掉一下
也搜到了一个解决记录2 可惜看到的比较晚,不然能更早定位到是libc的问题。不过链接里说的strace和ldconfig -iv都没用,直接就segmentation fault了。不会执行的。
为什么两个libc.so会导致ldconfig崩溃目前还没有找到原因。总之打包的时候去掉libc
mkdir -p package
cp myserver package
for i in `ldd myserver | awk '{print $3}' | grep "/" | grep -v libc | sort | uniq`; do cp $i package; done
tar -czvf package.tar.gz package
ref
- https://unix.stackexchange.com/questions/279397/ldd-does-not-find-path-how-to-add
- https://askubuntu.com/questions/1000606/how-do-i-figure-out-which-library-is-causing-ldconfig-to-segfault