刚开始学习做QT,同时学习嵌入式linux设备,记录下qt5.12在交叉编译在imx6ull上运行过程。
准备工作
PC:Ubuntu 18.04
板子:imx6ull(ARMv7)
交叉编译器:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf(注意32位和64位,6ull为32位)
qt5.12源码
配置编译
1.配置交叉编译工具链
下载交叉编译工具,解压,添加环境变量。
sudo vim ~/.bashrc
在末尾添加路径s
PATH=$PATH:/home/book/software/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin
使用:source ~/.bashrc使修改生效。
使用:arm-linux-gnueabihf-gcc -v查看信息。
2.配置qmake编译安装库
我是安装qt时同时下载了源码,在源码目录里修改qmake配置,我的在software/QT/5.12.11/Src/qtbase/mkspecs
进入这个目录后使用指令拷贝一份(名称忽略懒得改)
sudo cp -a linux-aarch64-gnu-g++/ aarch64-linux-gnu-g++/
进入拷贝的目录下,配置qmake.conf文件
cd aarch64-linux-gnu-g++
vim qmake.conf
修改为自己交叉编译器的路径,我的为:/home/book/software/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/
然后就是配置qt编译,跟着查找的方法在源码目录建个build目录写build脚本配置防止污染源码,但是我出现了一些错误
库找不到的一些问题,不知道是不是脚本等的问题,(头铁)直接使用命令在源码目录下配置,我的目录在software/QT/5.12.11/Src,然后成功了
#配置编译参数
./configure -release -opensource -confirm-license -xplatform aarch64-linux-gnu-g++ -prefix /usr/local/QTArm -nomake examples -no-opengl -silent -qpa linuxfb
主要修改-xplatform后的参数为我们配置的qmake的目录,-prefix为编译后库安装的位置。
然后编译,编译安装。
make -j8
sudo make install
完成后在安装目录下就有交叉编译后的库了。
3.编译套件及测试
(板子环境已经提前配置好)
在QtCreator下配置编译套件做个测试程序在板子上运行。
添加C/C++编译器,3路径修改为自己交叉编译器路径的编译器。
添加qmake,这个为我们交叉编译的qt生成的。路径为我们编译安装的路径的bin目录下。
添加kit套件,点击添加,添加我们的C/C++交叉编译器,交叉编译的qmake。
然后创建qt项目,选择自己创建的套件,构建项目。
将构建的二进制文件拷贝到nfs目录下,板子挂载后运行程序。出现以下错误。
这个是插件问题,EGLFS 是许多主板上的默认插件,使用LinuxFB插件,使用环境变量来请求另一个插件。
export QT_QPA_PLATFOR=linuxfb
在程序程序后加语句。
./test --plugin tslib:/dev/input/event1 -platform linuxfb
执行成功,记录过程,再持续看看开发过程有没有什么问题。
参考文章:
Ubuntu18.04实现Aarch64和arm32的交叉编译全步骤(Qt5.12.10源码编译)-优快云博客
QT5交叉编译保姆级教程(arm64、mips64)_qt 交叉编译-优快云博客
执行rt QT_QPA_PLATFORM=linuxfbt QATFORM=linuxfbe=linuxfb