1. 寻找该可执行文件的链接库,并导出。新建packs在上一级目录下,运行下面脚本;

#!/bin/sh  
exe="test" #发布的程序名称
des="../paks" #创建文件夹的位置
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
cp $deplist $des

2. 进行可执行文件的链接;

#!/bin/sh  
appname=`basename $0 | sed s,\.sh$,,`  
dirname=`dirname $0`  
tmp="${dirname#?}"  
if [ "${dirname%$tmp}" != "/" ]; then  
dirname=$PWD/$dirname  
fi  
LD_LIBRARY_PATH=$dirname  
export LD_LIBRARY_PATH  
$dirname/$appname "$@"

3. 报错记录与修改

报错1:段错误
不知道怎么回事,然后说需要删除libc.so.6libdl.so.2

删除了libc.so.6,报错2:
sed:symbol lookup error:.... 或者直接 *** stack smashing detected ***:<unkown> terminated
中间进行链接了系统的libc.so.6、libdl.so.2来替换生成的,又报错 libpthread.so.0的问题,好!继续替换掉,又报错librt.so.1的问题。然后就没问题了!!!
ln -s 源 目标去链接,sudo chmod 777 目标 去给权限。
分析:这些系统自带的lib与系统本身有关,所以需要删除用本机的。

总结:删除原来生成的libc.so.6 , libdl.so.2 , libpthread.so.0 , librt.so.1 ,然后将执行的脚本换成下面的。(增加对本机系统库的链接)

locate libc.so.6去查看位置。

#!/bin/sh  
appname=`basename $0 | sed s,\.sh$,,`  
dirname=`dirname $0`  
tmp="${dirname#?}"  
if [ "${dirname%$tmp}" != "/" ]; then  
dirname=$PWD/$dirname  
fi  
LD_LIBRARY_PATH=$dirname  
export LD_LIBRARY_PATH  
LD_LIBRARY_PATH2=/lib/x86_64-linux-gnu/
export LD_LIBRARY_PATH2  
$dirname/$appname "$@"
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐