Linux(ubuntu)下打包C++代码并运行于其他ubuntu上

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 "$@"
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值