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

  1. https://unix.stackexchange.com/questions/279397/ldd-does-not-find-path-how-to-add
  2. https://askubuntu.com/questions/1000606/how-do-i-figure-out-which-library-is-causing-ldconfig-to-segfault

contact