IMX6Q-Yocto手工交叉编译QT5

我们在IMX6Q-Yocto环境搭建里面已经编译好了qt-toolchain和qmake(bitbake fsl-image-qt5和bitbake meta-toolchain-qt5)。
有两种编译方式:

  • 使用qt-creater编译(环境变量有问题,总是执行宿主机的编译环境)
  • 使用命令行编译(yocto的交叉编译工具链测试成功)

因为上面的原因,我选择直接手工编译(有空了可以写个脚本),首先创建一个空的qt工程,你可以使用qt-creater的项目创建向导创建一个空的GUI工程用于测试。当你新建完毕以后,会有以下几个文件。


IMX6Q-Yocto手工交叉编译QT5_第1张图片
image.png

创建完工程后,qt-creater的使命就完成了,我们只需要留下三个源文件即可,剩下的pro文件进入终端删掉。


IMX6Q-Yocto手工交叉编译QT5_第2张图片
只剩源文件

好了,源文件准备好后就是需要导入交叉编译环境,通过之前的文章我们知道交叉编译工具链已经生成在/opt目录。

$ . /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi

执行上面的yocto生成的脚本导入环境变量,注意每次关闭终端以后需要重新导入交叉编译环境。

qmake --version(查看qmake信息)
arm-poky(按两次table键应该自动补全交叉编译工具链)
IMX6Q-Yocto手工交叉编译QT5_第3张图片
查看qmake信息
IMX6Q-Yocto手工交叉编译QT5_第4张图片
自动补全交叉编译工具链

这时交叉编译的环境就准备好了
进入qt工程的路径


IMX6Q-Yocto手工交叉编译QT5_第5张图片
image.png
qmake -project  //(初始化qt工程,生成pro文件)
qmake//生产Makefile
make//编译

在编译之前我们需要往pro文件里追加两行代码

QT += core gui//若不添加,则找不头文件
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets//大于qt4(例如qt5)就需要加入这行告诉编译器qt的版本较新
IMX6Q-Yocto手工交叉编译QT5_第6张图片
pro文件

最后会生成一个可执行文件


IMX6Q-Yocto手工交叉编译QT5_第7张图片
image.png

使用file命令查看这个可执行文件的信息,里面有arm字样即成功。


IMX6Q-Yocto手工交叉编译QT5_第8张图片
文件信息

在使用qmake命令的时候会报告一个.pri文件找不到,一般可以忽略此问题,不会影响正常工作,若实在看不惯,可直接touch一个同名文件到它提示的路径里去就不会报错了。

最后拷贝这个可执行文件到SD卡中,文件系统使用的是yocto的qt5文件系统。


IMX6Q-Yocto手工交叉编译QT5_第9张图片
这是个下拉菜单

选择显示all程序
单击文件管理器

IMX6Q-Yocto手工交叉编译QT5_第10张图片
找到你复制可执行文件的目录并双击该文件

IMX6Q-Yocto手工交叉编译QT5_第11张图片
执行该文件

IMX6Q-Yocto手工交叉编译QT5_第12张图片
这就是你制作的空白GUI程序的运行效果

最后需要注意,通过串口连接板子的时候,直接执行交叉编译后的可执行文件会报错,原因是你当前的串口打开的tty是不支持显示GUI图形界面的,你需要指定显示设备为lcd屏幕的设备号,export DISPLAY=:0.0


IMX6Q-Yocto手工交叉编译QT5_第13张图片
lcd

你可能感兴趣的:(IMX6Q-Yocto手工交叉编译QT5)