
打包平台:安装有QT开发环境的linux系统
发布平台:未安装有QT开发环境的linux系统
以下使用到的路径需要根据自己环境不同进行修改:
qt安装路径:/opt/Qt5125
freetype安装路径:/opt/Qt5125/Tools/QtCreator/lib/Qt/lib/ //包含三个文件libfreetypeso、libfreetypeso6、libfreetypeso6170
dbus安装路径:/opt/Qt5125/Tools/QtCreator/lib/Qt/lib/ //包含三个文件libdbus-1so、libdbus-1so3、libdbus-1so3260
项目路径:/home/cs/Code/test/
项目名称:test
使用到的脚本文件:
copylibsh
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
copylib2sh
sudo cp /opt/Qt5125/Tools/QtCreator/lib/Qt/lib/libfreetypeso /
sudo cp /opt/Qt5125/Tools/QtCreator/lib/Qt/lib/libfreetypeso6 /
sudo cp /opt/Qt5125/Tools/QtCreator/lib/Qt/lib/libfreetypeso6170 /
sudo cp /opt/Qt5125/Tools/QtCreator/lib/Qt/lib/libdbus-1so /
sudo cp /opt/Qt5125/Tools/QtCreator/lib/Qt/lib/libdbus-1so3 /
sudo cp /opt/Qt5125/Tools/QtCreator/lib/Qt/lib/libdbus-1so3260 /
testsh
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 copylibsh 命令
首先将程序release编译,在项目路径里找到编译生成的文件夹build-Test-Desktop_Qt_5_12_5_GCC_64bit-Release,在这个文件夹内(注意,很重要)建立 copylibsh 脚本,并执行 /copylibsh test 。执行完成之后应该有一个lib文件夹,将lib文件夹内的所有内容和test程序复制到一个新的文件夹下test-release。
在QT安装目录下找到 /512/gcc_64/plugins/platforms 文件夹,建立 copylibsh 脚本,并执行 /copylibsh libqxcbso 。执行完成之后将这个 文件夹 复制到test-release文件夹中。然后在test-release/platforms文件夹中,将test-release/platforms/lib文件夹里的所有内容 剪切 到test-release文件夹里,并删除lib文件夹。
在test-release目录下建立 copylib2sh 脚本,并执行 /copylib2sh 。
至此,所有所需的库文件应该都打包完毕。
在test-release目录下建立 testsh 脚本,利用该脚本启动程序,启动命令为 /testsh 。
遗留问题点:
1debug版本未测试,不知道是否可行。
2platforms文件夹不仅在/512/gcc_64/plugins/platforms存在,还在/Tools/QtCreator/lib/Qt/plugins/platforms存在。在成功之前一直用的Tools目录下的,但是也有别的细节不一样,待考证。
3脚本执行,或者说库的复制顺序似乎有关系。第一次copylibsh 和 第二次copylibsh 时会用一部分重叠。待考证哪个优先。
用交叉编译工具(arm-linux-g++等)把你自己的qt程序用嵌入式版本的qt库交叉编译一下然后烧写到开发板上就可以执行了,当然你qt程序所用到的库也要放上去,并设置到路径(QTDIR,PATH,LIBRARY_PATH)等等
貌似是缺少系统库,有些版本的linux编译qt是会出现缺少系统库而导致编译不成功的问题,不是很推荐用最新的编译器来编译,其实24的内核和345的编译器做qt就已经足够了,你可以去查查看那些版本的linux下可以成功的编译qt,安装的时候尽可能把开发用的库都选上,不然就只有自己再去打补丁,
仅作参考
我用的是qt-everywhere-opensource-src-470这个版本。不同版本配置方法有些许不同,比如说配置文件的名字目录等。
1解压qt-everywhere-opensource-src-470targz
2修改配置文件(配置文件根据你开发板和编译工具不同而不同,不清楚你什么环境,这是我以前的配置,linux-arm-gnueabi-g++是我用的交叉编译工具)
qt-everywhere-opensource-src-470/mkspecs/qws/linux-arm-gnueabi-g++/qmakeconf文件修改为如下内容:
QMAKE_CC
QMAKE_CXX
QMAKE_LINK
QMAKE_LINK_SHLIB
QMAKE_AR
QMAKE_OBJCOPY
QMAKE_STRIP
QMAKE_INCDIR
QMAKE_LIBDIR
QMAKE_LIBS
把这配置都指定清楚,有编译器,lib等,看名字应该都能理解。
3执行。
/configure -prefix-install -prefix /opt/qt4 \
-release -opensource -shared -embedded arm \
-no-fast -largefile -exceptions \
-stl -no-qt3support \
-xmlpatterns -no-multimedia -no-audio-backend \
-no-phonon -no-phonon-backend \
-svg -no-webkit -javascript-jit \
-script -scripttools -declarative \
-no-mmx -no-3dnow -no-sse -no-sse2 \
-qt-zlib -qt-gif -qt-libtiff \
-qt-libpng -qt-libmng -qt-libjpeg \
-no-openssl \
-xplatform qws/linux-arm-gnueabi-g++ \
-qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -no-neon
这里给你的例子configure,你要的肯定和我的不一样,我们需求环境都不同。每个配置项的意思不可能这里都给你说清楚,你可以--help自己理解。
4执行make。
当然,这样你99%是编译不过的。有些文件需要根据你交叉编译环境进行修改。自己多尝试吧。我也是整了一两个个月,才慢慢知道的。
以上就是关于Linux 打包 QT 程序全部的内容,包括:Linux 打包 QT 程序、linux编译好的qt程序,怎样移植到其他linux系统、linux 下用arm体系QT编译问题(目前我系统里有X86 和 arm体系(老师编好的)的QT各一个)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)