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.6
与libdl.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 "$@"