linux C++ 应用程序打包发布

linux c++ 动态库打包 应用程序打包 动态库搜索路径

1. 问题

linux环境下打包C++应用程序,包括其依赖的动态库,以便解决程序发布后程序运行动态库缺失问题

2. 解决

  1. 动态库编译时添加-fPIC编译选项(一般动态库都会有此选项,自己写的库记得添加)

    -fPIC: 生成与位置无关代码

  2. 编译自己的应用程序,得到test

  3. 打包动态库:使用pack_lib.sh脚本将test依赖的动态库至某文件夹(如可在发布的程序根目录下新建lib文件夹,如下所示)

.
bin/test
lib/
#! /bin/sh
# pack_lib.sh

deplist=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )

cp -L -n $deplist $2

​ 使用方式:

sudo chmod a+x pack_lib.sh # 增加执行权限
./pack_lib.sh test ./lib/	# 第一个参数: 应用程序 第二个参数: lib/路径

4.创建发布后应用程序执行脚本:作用是将工程目录下的lib/路径添加到动态库搜索路径中。当程序发布后,应当通过该脚本启动应用程序。

#! /bin/bash
# AppRun.sh

SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${SHELL_FOLDER}/lib
${SHELL_FOLDER}/test "$@"

使用方式:

./AppRun.sh
# 如果test需要添加参数 如下
./AppRun.sh param1 param2

3. 扩展

运行时动态库的搜索路径的先后顺序:
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib和/usr/lib;

原文链接: https://www.cnblogs.com/wangxujoy/p/12499839.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    linux C++ 应用程序打包发布

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/194350

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午6:40
下一篇 2023年2月12日 下午6:40

相关推荐