1.从可运行程序的文件中拿出可执行文件
2.终端下使用ldd命令查看需要的连接库
例如 ldd + 可执行文件
3.把ldd查询到的所有需要的库导出
4.编写.sh文档(.sh文件命名必须与告亮可执行文件名字一样例:可执行文件名谨友首 test, .sh 文件名为 test.sh)
.sh文件代码如下:
#!/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 $*
5.把所用到的库,可执行文件, .sh文件放到同一目录下
6.终端中进入这一目祥数录,输入:
chmod +x test.sh
7.执行程序点击.sh文件或者终端输入:
./test.sh
打包平台:安装有QT开发环境的linux系统
发布平台:未安装有QT开发环境的linux系统
以下使用到的路径需要根据自己环境不同进行修改:
qt安装路径:/opt/Qt5.12.5
freetype安装路径:/opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/ //包含三个文件libfreetype.so、libfreetype.so.6、libfreetype.so.6.17.0
dbus安装路径:/opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/ 祥弯 //包含三个文件libdbus-1.so、libdbus-1.so.3、libdbus-1.so.3.26.0
项目路径:/home/cs/Code/test/
项目名称:test
使用到的脚本文件:
copylib.sh
LibDir=$PWD"/lib"
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)
for Variable in ${lib_array[@]}
do
cp "$Variable" $LibDir
done
copylib2.sh
sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libfreetype.so ./
sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libfreetype.so.6 ./
sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libfreetype.so.6.17.0 ./
sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libdbus-1.so ./
sudo cp /opt/Qt5.12.5/Tools/QtCreator/lib/Qt/lib/libdbus-1.so.3 ./
sudo cp /opt/Qt5.12.5/Tools/亮迹QtCreator/lib/Qt/lib/libdbus-1.so.3.26.0 ./
敬宴并 test.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 "$@"
注意事项:该流程里的脚本都是777权限,如遇权限问题请使用 chmod 777 copylib.sh 命令
首先将程序release编译,在项目路径里找到编译生成的文件夹【build-Test-Desktop_Qt_5_12_5_GCC_64bit-Release】,在这个文件夹内(注意,很重要)建立 copylib.sh 脚本,并执行 ./copylib.sh test 。执行完成之后应该有一个lib文件夹,将lib文件夹内的所有内容和test程序复制到一个新的文件夹下【test-release】。
在QT安装目录下找到 【/5.12/gcc_64/plugins/platforms】 文件夹,建立 copylib.sh 脚本,并执行 ./copylib.sh libqxcb.so 。执行完成之后将这个 文件夹 复制到【test-release】文件夹中。然后在【test-release/platforms】文件夹中,将【test-release/platforms/lib】文件夹里的所有内容 剪切 到【test-release】文件夹里,并删除lib文件夹。
在【test-release】目录下建立 copylib2.sh 脚本,并执行 ./copylib2.sh 。
至此,所有所需的库文件应该都打包完毕。
在【test-release】目录下建立 test.sh 脚本,利用该脚本启动程序,启动命令为 ./test.sh 。
遗留问题点:
1.debug版本未测试,不知道是否可行。
2.platforms文件夹不仅在【/5.12/gcc_64/plugins/platforms】存在,还在【/Tools/QtCreator/lib/Qt/plugins/platforms】存在。在成功之前一直用的Tools目录下的,但是也有别的细节不一样,待考证。
3.脚本执行,或者说库的复制顺序似乎有关系。第一次copylib.sh 和 第二次copylib.sh 时会用一部分重叠。待考证哪个优先。
在发布自己的程序时,很多时候都会因为一些依赖的dll文件不存在而报错,而我们新手却不知道应该如何添加,那么我们可以使用QT自带命令行来自动添加依赖文件。
命令行指令:windeployqt *.exe
首先,将你需要打包的exe文件单独放在一个文件夹中,然后打开QT自带的命令行,找到那个文件夹,之后就可以使用windeployqt加上exe文件来自动打包了,QT会自动帮你添加好全部的依赖文件,保证100%能运行,但是需要注意的是,友弯拆由于这个100%的保证,他也许添加了很多无闹银用的dll文件,这好枣会使得我们自动打包出来的文件很臃肿,所有有经验的各位可以按需要自行删除不必要文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)