Linux系统下qt工程打包 | 您所在的位置:网站首页 › linux打包程序依赖库 › Linux系统下qt工程打包 |
😁
在Windows系统下,很容易就能将qt工程打包成一个单独的可执行程序,在任意Windows环境都能执行。在Linux系统编译出来的qt工程,就相对的没那么容易,网上教程繁多,这里我前前后后折腾了很久,终于弄到了可靠的方法。 准备首先在Release模式下Run一遍 我们的程序名是navDebuggingTools,我们可以在build-navDebuggingTools-Desktop_Qt_5_12_9_GCC_64bit-Release目录下,打开终端,进入当前目录,输入命令 ldd navDebuggingTools就可以知道我们这个程序的全部依赖库,即使用到一些不是Qt或Linux系统的库,也能获取到 这里第2条就是我额外安装的log4cplus日志库 ldd.sh拉取依赖库,写个脚本会容易很多,就不用一个个去找 同样的,在build-navDebuggingTools-Desktop_Qt_5_12_9_GCC_64bit-Release目录下,创建该脚本 sudo vi ldd.sh然后将下面内容复制到脚本当中 #!/bin/bash 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接着给脚本添加权限 sudo chmod 777 ldd.sh 拉取依赖库 1.程序依赖库打开终端,进入到脚本所在目录,执行命令 ./ldd.sh navDebuggingTools就会得到一个lib文件夹 这时,我们将lib文件夹中的文件,以及navDebuggingTools程序放进一个新的文件夹,以便后续管理 2.Qt依赖库将ldd.sh脚本复制到Qt安装目录的platforms文件夹中,执行./ldd.sh libqxcb.so,将会获得一个lib文件夹 把整个platforms文件夹复制到之前新建的文件夹nav中, 然后将其中lib文件夹内的文件剪切到nav中,重复的依赖库选择替换即可 到此时,就可以双击navDebuggingTools程序,运行起来 在其他机器运行把整个文件夹nav,移动到其他新的未安装任意环境的Linux系统下,是没办法直接运行的 听公司同事说,Windows下,运行程序navDebuggingTools的话,系统会从程序所在目录找寻依赖库,而从我之前在Windows中打包qt工程的经历来说,确实是这样,也就是说,依赖库和程序在同一目录,就可以双击执行程序 而在Linux下,则不是这样。所以需要一些额外的操作 步骤 进入到/etc/ld.so.conf.d目录内,创建一个和程序同名的.conf文件将程序所在路径添加到该文件中最后执行命令sudo ldconfig刷新连接注意事项 第一步: 这里有一个省力的操作,因为/etc内有很多文件和文件夹,找ld.so.conf.d文件夹可能有点麻烦 进入/etc文件夹,打开终端,输入cd ld.,按一下Tab键,就能完整文件夹名ld.so.conf.d 然后执行sudo vi navDebuggingTools.conf 第二步: 将nav文件夹所在路径,最后加个/,然后写到navDebuggingTools.conf文本中; 例如:/home/saite/nav/
第三步: 一定要sudo 做完这三步之后,就可以双击运行程序啦 写成脚本 写个脚本nav_ldconfig.sh,一条命令./nav_ldconfig.sh就完成上面三步 tar=$PWD"/navDebuggingTools.conf" echo $PWD"/" >> $tar sudo mv $tar "/etc/ld.so.conf.d/" sudo ldconfig网上还找到了个脚本,可以不需要上面三步直接运行程序,但每次想要运行程序,都要执行这个脚本 脚本必须和程序同名,且在同一目录下 navDebuggingTools.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 "$@"开权限 sudo chmod 777 navDebuggingTools.sh然后要运行程序时,执行命令 ./navDebuggingTools.sh |
CopyRight 2018-2019 实验室设备网 版权所有 |