ubuntu下打包发布检查脚本
本地环境
例如本地编译好程序json_test(确保程序能够运行),首先使用ldd查看可执行文件链接的库文件
ldd json_test
输出
linux-vdso.so.1 (0x00007fff725b8000)
libjsoncpp.so.1 => /lib/x86_64-linux-gnu/libjsoncpp.so.1 (0x00007f333b72f000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f333b54d000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f333b532000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f333b340000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f333b1f1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f333b7a5000)
使用脚本把库文件都拷贝到./lib目录下
#在json_test同级目录下创建lib
mkdir lib
bash cp.sh
cp.sh内容如下
#!/bin/sh
des="./lib" #你的路径(lib文件夹需要自己创建)
exe="json_test" #发布的程序名称
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
echo copy $exe finished
至此,json_test链接的库文件都拷贝到了lib环境下
部署环境
把json_test和./lib目录拷贝到部署环境后
#把./lib目录添加到链接库搜索路径,例如lib绝对路径为/home/test/lib,如果想要长期生效可以写入~/.bashrc文件中
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/test/lib"
运行json_test进行测试
新的可执行文件部署
当有新的可执行文件需要部署时,可以首先查看当前程序链接的文件是否都能找到
ldd json_test
或者如果知道json_test链接的库名称,例如本地环境下ldd json_test的第二个结果libjsoncpp.so.1,可以用如下指令检查系统是否能找到对应文件
ldconfig -p | grep libjsoncpp
可以检查当前环境中jsoncpp库的版本与本地环境是否一致