linux下打包C++ Qt可执行程序出现的问题总结

零、问题描述

最近在搞linux下打包程序,由于使用了Qt相关的函数接口,出现了很多Qt相关的问题,上篇文章写了linux下打包C++可执行程序的方法:https://blog.csdn.net/toby54king/article/details/103376514,shell脚本打包的程序,打包了很多系统的库,造成转移到其他系统上出现冲突,后来只能一个一个手动挑选缺失的库,这样就解决了。

一、出现的问题和解决方法

下面总结一下出现的问题以及解决方法:
1、error:undefined reference to ‘vtable for *’ -》:
把windows下的moc文件放入到linux下面,加入到需要的.cpp文件中,同时注意修改moc文件中的头文件路径为linux下面的。

2、libQt5Core.so:error:undefined reference to ‘ucal_clone_54’ -》缺少库libicuil8n.so.54库

3、error while loading shared libraries:xxx.so: cannot open shared object file:No such file or directory
需要设置环境变量:export LD_LIBRARY_PATH=yourLibPath

4、this application failed to start because it could not find or load the Qt platform plug “xcb”.
原因:缺少qt跨平台的platform文件夹

5、QXcbConnection:Could not connect to display.(xshell终端下不能显示Qt程序)
在.bashrc文件中添加:
export QT_QPA_PLATFORM=‘offscreen’

6、Available platform plugins are: linuxfb, minimal, offscreen, xcb.
在终端设置环境变量 export QT_DEBUG_PLUGINS=1,可以查看缺失的库,我这里缺失了libQt5DBus.so.5库造成的。

7、/bin/bash^M: bad interpreter: No such file or directory”
在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。
查看脚本文件是dos格式还是unix格式的办法。
1》、cat -A filename 从显示结果可以判断,dos格式的文件行尾为^Munix,unix格式的文件行尾为
解决方法:
1》、使用sed命令sed -i “s/\r//” filename 或者 sed -i “s/^M//” filename直接替换结尾符为unix格式(测试这种方法好使)

二、通过配置脚本设置环境变量

由于在linux下每次执行程序都需要设置好环境变量和设置显示终端,所以可以写一个shell脚本,使用shell脚本去启动程序即可,shell脚本和可执行程序在一个目录下,我需要的shell脚本如下:

#!/bin/bash
#file:StartProgram.sh
#author:ISMILELI

export QT_QPA_PLATFORM='offscreen'
export LD_LIBRARY_PATH=$PWD

echo "----------StartProgram.sh------"

#需要给程序传入参数的话,可以使用一下方法启动程序
./appExe.out $1 $2 $3 $4 $5
posted @ 2019-12-08 16:54  ISmileLi  阅读(159)  评论(0编辑  收藏  举报