序言
本文是对个人实践经验和网上麒麟V10SP1系统上编译安装QT资料的总结,此方式适用于在有麒麟系统的电脑上或者通过虚拟机编译QT项目,如果希望在开发机上直接生成对应部署机环境的QT项目,请参考交叉编译:
QT5交叉编译保姆级教程(arm64、mips64):http://t.csdnimg.cn/G4rHC
QT5交叉编译编译链选择:http://t.csdnimg.cn/gBcZY
准备
一台麒麟系统电脑或使用qemu虚拟机来模拟arrch64架构的麒麟系统,由于qemu虚拟机运行效率非常慢故不太推荐。接下来博主介绍一下如何通过qemu虚拟机的方式安装QT。
宿主机环境:
虚拟机环境:
如何利用qemu虚拟机安装麒麟系统
请参考 《qemu虚拟机 安装银河麒麟V10 arm架构系统 桌面版 http://t.csdnimg.cn/wWaLG》,写的很详细。
博主用的系统镜像下载地址:
银河麒麟V10sp1桌面操作系统(飞腾版):https://kdocs.cn/l/cdhhgNC2toU8
如果有其他版本需要可以到官网或者银河麒麟桌面系统镜像下载汇总 - 墨天轮下载。
安装QT
首先下载QT源码,这里博主用的是qt-5.14.2版本
源码下载地址:Index of /archive/qt/5.14/5.14.2/single
然后将源码解压到你需要到地址
使用
tar -xvf qt-everywhere-src-5.14.2.tar.xz
解压压缩包
接下来安装相关依赖并对源码进行编译,编译的部分网上文章比较多,这里便不细说了
参考文章:http://t.csdnimg.cn/UtPDm和http://t.csdnimg.cn/5zGH6
多核编译前请先关闭麒麟系统的kysec安全控制,否则编译途中需求手动允许,未允许将会报错。
关闭方法:
在终端输入
sudo vim /etc/default/grub
打开文件后将最后一行改为:
之后更新grub:
sudo update-grub
等待更新完成后重启系统
输入getstatus查询
使用虚拟机进行编译会非常慢,博主用了整整一天时间,故不推荐通过此虚拟机来安装。
编译中如果遇到提示错误2:
请往上翻找到报错的文件,然后在该模块文件内进行
qmake -j8
命令进行编译,完成后重新回到qt源码主目录再进行qmake -j8重新编译
还有一种错误提示XXX not found,这说明是编译用到的依赖库缺失。请用
apt-get XXXXX
下载好后再次进行编译。
等到编译完成且不报错后,在进行make install命令安装
安装完成后,如果你的qt安装路径不是在默认usr/lib目录下,那么直接执行qmake会显示qmake:Could not find command-not-found database
解决方法:
请将文件/usr/lib/aarch64-linux-gnu/qtchooser/default.conf修改,将第一行改为你当前qt bin文件的安装位置(如果想要多个qt版本进行编译请进入安装好的qt目录下设置临时变量):
如果提示文件为只读,请通过下面命令加入写的权限:
sudo chmod a+w default.conf
修改成功后这时就可以执行qmake -v命令
此时说明qt安装已完成
测试
安装完成后新建一个文件夹,并创建一个hello.cpp文件
#include<QApplication>
#include<QLabel>
int main(int argc,char *argv[])
{
QApplication a(argc,argv);
QLabel label("hello world!");
label.resize(200,200);
label.show();
return a.exec();
}
在文件夹中进入目录后依次执行编码命令
qmake -project QT+=widgets//代码所需要的库
qmake
make
编码完成后显示
双击hello可执行文件选择直接运行
可以看到程序正常运行
Windows项目移植到麒麟系统进行编译
首先请保持两个系统上所用qt版本一致,如果无法保持一致最好是两个系统所用的qt版本尽量接近且无模块改动(博主试过5.14.2与5.12。8混编可以正常运行),否则会出现错误。
将Windows下构建的qt项目的xxx.h,xxx.cpp,xxx.ui,以及xxx.rc文件和resource资源文件夹一起打包,通过FTP或者邮箱等方式发送到虚拟机当中。
之后进入到文件目录下同样使用
qmake -project QT+=widgets//代码所需要的库
qmake
make
进行编译
注意,在生成project文件文件时请先查看window的qt项目中的pro文件引用了那些模块,例如
这个项目中引用了widgets,network ,printsupport和axcontainer 四个模块那么在创建pro文件时应该写为:
qmake -project QT+=widgets QT+=network QT+=printsupport QT+=axcontainer
否则在编译时将会找不到相对应库
注意,在windows下include“XXXX.h”不分大小写时qt编译器会警告但是可以正常编译。在麒麟系统是需要区分大小写,否则会在编译时报错。
编译完成后会生成可执行文件双击运行即可。
结语
这种移植方式难点在于QT的源码的编译,在这个过程中会出现很多莫名错误 ,不过大部分都可以根据提示进入相应的文件中修改。文章为初学者编写,如有错误,还望大神指出。