简述
裸机启动Qt程序需以下几步
- 使用Release模式进行编译项目
- 使用ldd命令获取程序依赖库(通过.sh脚本一键获取)
- 拷贝Qt的platforms文件夹到项目中
- 配置~/.bashrc环境变量
- 利用sh脚本将所有共享库移动到Ubnutu默认共享库读取路径
直接从第二步开始
ldd Name //获取程序所需要的的依赖库 注:并不是很全比如程序使用到sql库ldd并不会显示
注:一部分为qt库,一部分是ubnutu自带库大部分在/usr/lib/x86_64-linux-gnu下,如果在裸机上测试那么上面的所有qt库都是not found未找到,后面讲详细说明。
1.使用sh脚本来一键获取qt程序依赖库,在当前目录下新建.sh脚本(注:这一步需要在有的qt环境下操作)。
#!/bin/sh
exe="程序名字"
des="需要拷贝到的目录"
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
①chmod +x 脚本名字
②./脚本名字
③目录下会多处很多库
2.拷贝Qt安装路径里的platforms"文件夹"到项目路径下
注:如果程序使用到sqlite数据库需要把sqldrivers文件夹复制到项目中负责会找不到驱动
3.配置~/.bashrc环境变量
此时运行此程序会报找不到该文件,通过ldd查看会发现有一些库未找到!
①临时修改
以下命令来修改他的lib库路径改为当前目录
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
再次ldd当前程序的所有库都会找到
此时在运行程序可能会出现两种结果
1.程序成功运行
2.报了以下错误
其实还是找不到库的原因,如果想看详细错误需要
vim ~/.bashrc
末尾追加以下命令
export QT_DEBUG_PLUGINS=1
此时需要进入platforms文件夹然后ldd libqxcb.so会发现有很多库不存在
这里需要说明以下,如上图我所未找到的库和你的库可能会有所不同,这些未找到的库也有可能在上一层目录里面,但是:唯独libQt5DBus.so和libQt5XcbQpa.so.5需要手动去找,缺什么库可以在Qt的安装目录下gcc+64/lib下寻找或者find寻找。(注libQt5DBus.so和libQt5XcbQpa.so.5库lib文件夹下会有链接文件和可执行文件,拷贝相同名字的库即可,如果不行拷贝带.so.5.14.1的名字拷贝过去改一下名字).
我这里吧依赖库都放到了platforms的上一层目录随后执行以下命令然后ldd查看库
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../
这里设置的是上一层目录
随后在去./启动程序,到这里裸机临时设置环境变量来启动程序基本上都是可以的了,本人在多台ubnutu裸机测试均可性,如果还是不能启动程序需要细心查看是否缺失库,以及库是否cp错误!
②永久修改
1.修改~/.bashrc文件
执行以下命令(注意是sudo)
vim ~/.bashrc
在末尾追加(注:此命令只限制于你把所有的库都放在项目路径下而非项目路径下的platforms下,如果放在这里面下面代码可以多追加一条)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的项目路径
保存退出后执行以下命令
立刻生效
source ~/.bashrc
随后再去./启动程序,或者重启都是可以的。
2.mv依赖库
第一张图中通过ldd查看有很多ubnutu自带库,只需要把qt库全部mv到/usr/lib/x86_64-linux-gnu下即可,无需配置。
以上为Ubnutu18.04版本裸机跑Qt,后续还会测试centos7等版本裸机跑Qt。
新手上路,有不足或者有错误的地方还需大佬指教。
感谢阅读。