在Linux下搭建嵌入式Qt交叉编译环境[转载]
Qt是嵌入式平台常用的GUI库,具有丰富的控件与开发资料。本文介绍如何在x86
计算机上搭建ARM
开发环境,并交叉编译ARM
平台上运行的Demo。
准备
下载交叉编译器
下载Linaro公司推出的的arm-linux-gnueabihf-gcc
交叉编译器,放入/opt
目录下,具体安装过程可以参考为荔枝派Zero编译可启动Linux系统镜像,并安装编译所需的依赖:
|
配置Buildroot支持Qt
下载并配置Buildroot
。我选择的是Buildroot 2020.2.10
版本,这个版本支持的Qt版本为5.12.8
。
在Target packages → Audio and video → alsa-util
中,勾选上编译alsa-util
,并选择需要的模块。我选中了alsactl
alsamixer
amixer
aplay/arecord
这些模块。
接下来,在Target packages → Libraries → Hardware handling
中勾选上tslib
的支持。
最后,在Target packages → Graphic libraries and applications (graphic/text) → Qt5
下选择需要的模块。我选择了qt5base
gui module → widgets module
gui module → linuxfb support
GIF support
JPEG support
PNG support
Enable Tslib support
,并配置Default graphical platform
为linuxfb
。
编译ALSA
从buildroot2020.02/dl
中解压Buildroot
下载好的alsa-lib
源码。Buildroot 2020.02
所使用的alsa lib
版本为1.2.1.2
。
|
对源码进行配置,然后编译并安装:
|
编译tslib
从buildroot2020.02/dl
中解压Buildroot
下载好的tslib
源码:
|
对源码进行配置,然后编译并安装:
|
安装Qt
为了能够在x86
计算机上开发并生成ARM
平台的Qt程序,一共需要安装3份Qt:
x86
架构的Qt,用于在x86
主机上开发(使用Qt官方安装包直接安装二进制版本)ARM
架构的Qt,用于Qt程序在开发板上运行(使用Buildroot
编译并放入开发板的根文件系统中)x86
架构的ARM
编译环境,用于在x86
主机上编译生成开发板上的Qt程序(使用Qt源码交叉编译得到,其包含一份与开发板上相同的环境以及在x86
主机上运行的qmake
)
其中第二条的ARM
架构的Qt已经在前面Buildroot
中编译完成了,现在介绍剩下两种的安装方法。
在主机上安装Qt
从Qt官网上下载与Buildroot
内置Qt版本相同的二进制安装包。这里我使用的是与Buildroot 2020.2.10
内置Qt版本相同的5.12.8
版本,可以从下载得到。
双击下载得到的qt-opensource-linux-x64-5.12.8.run
文件,根据图形指引安装即可。不要忘记勾选安装源代码,我们将使用这个源代码编译x86
架构的ARM
编译环境。
勾选安装源码
配置主机Qt交叉编译环境
主机中的环境可以使用Buildroot
编译时使用的环境或自行编译安装。
编译安装
从Qt的安装路径复制一份代码包到源码目录。
|
由于使用了自定义的编译器,因此需要对Qt的编译脚本做出一些修改。打开qt5.12.8/qtbase/mkspeces/linux-arm-gnueabi-g++/qmake.conf
,将其中所有的arm-linux-gnueabi
改为arm-linux-gnueabihf
。
配置Makefile:
|
其中,-opensource
是编译开源版本的Qt,由于嵌入式CPU不含GPU
,因此不需要OpenGL
相关的功能,使用-no-opengl
禁用Qt对于OpenGL
的支持,同时也需要使用-nomake tests
-nomake examples
关闭对测试和示例程序的编译,因为其中会包含一些代码引用OpenGL
导致整个项目编译失败。-xplatform
是指定qmake所使用的编译方案,也就是前面修改的qtbase/mkspeces/linux-arm-gnueabi-g++/qmake.conf
。最后,连接刚刚编译好的tslib
与alsa
即可。
在执行configure
脚本时,会询问是否同意协议,y
回车同意即可。
|
配置完成后,编译并安装代码。这需要一段时间。
|
注意
在安装好之后就不要移动安装与源码位置了,qmake
依赖绝对路径,若必须移动位置,可以修改qmake的配置文件或者重新编译,这里不详细展开。
使用Buildroot提供的环境
在Buildroot
编译Qt的过程中,自然也需要一套交叉编译环境。若不愿自己再编译一遍交叉编译环境,可以直接使用Qt编译过程中所使用的环境。Buildroot
目录下的output/build/qt5base-5.12.8/qmake/qmake
即为所需要的交叉编译环境。
警告
Buildroot
所使用的环境随着清理等操作,存在失效的风险。
在开发板上运行Demo
完成上述步骤,我们已经有了一套完整的的开发环境。接下来,可以打开Qt Creator
尝试编译一个Demo并下载到开发板运行了。
打开Qt Creator
,打开一个实例。这里我选择Animated Tiles Example
作为示例。
打开项目后,首先需要对项目进行配置。默认的项目已经配置好了在PC上运行的环境,现在需要将适用于arm的构建套件加入。点击Manage Kits...
按钮,进入构建套件配置。在配置中,可以看到自动检测到了PC上的构建套件。点击右边的添加按钮,新建一个配置。配置的名称可以随便填写,这里我填写Embedded Qt %{Qt:Version} ARMv7 32bit
,设备类型选择通用Linux设备
。
接下来配置编译器与qmake
。可以看到,上图中编译器仍为x86的编译器,点击右边的Manage
按钮,然后分别点击右边的添加按钮,分别添加GCC - C
与GCC - C++
两个编译器,分别命名为arm-linux-gnueabihf-gcc
与arm-linux-gnueabihf-g++
,并分别指向/opt/arm-linux-gnueabihf-gcc/bin/arm-linux-gnueabihf-gcc
与/opt/arm-linux-gnueabihf-gcc/bin/arm-linux-gnueabihf-g++
。然后回到构建套件选项卡,分别选择C与C++的编译器为刚刚配置的。
添加编译器
接下来,点击Qt版本后面的Manage
按钮,点击右边的添加,选择一个qmake
可执行文件。我的在/home/wangyz/code/arm_install/qt5.12.8/bin/qmake
下,此处也可以使用Buildroot
的环境,只需要更改qmake
的路径即可。版本名称我取为Qt %{Qt:Version} ARMv7 32bit
。同样,回到构建套件界选项卡,选择刚刚添加的Qt版本。
添加构建套件
这样,针对arm平台的构建套件便配置完毕。点击确定关闭选项窗口,在配置工程的界面勾上新增的Qt 5.12.8 ARMv7 32bit
套件并点击配置工程按钮,即可配置工程同时用于PC以及开发板。
配置工程
可以先在左下角的目标选择按钮中选择PC端,点击运行按钮,即可看到Demo在PC端运行的效果。
Animated Tiles演示
如果编译过程报错,可能是因为未安装OpenGL
支持,可以使用下面的命令安装。
|
然后,再选择arm_v7
的目标,点击编译(没有配置开发板的远程连接,因此无法直接运行),待构建完毕生成可执行文件后,将/home/wangyz/Qt5.12.8/Examples/Qt-5.12.8/widgets/animation/build-animatedtiles-Embedded_Qt_5_12_8_ARMv7_32bit-Release
下的可执行文件复制到开发板,即可查看在开发板上运行的效果。
选择arm_v7作为目标
值得注意的是,若程序可以运行,但是没有字体显示,则需要拷贝一个ttf格式的字体到/lib/fonts/
下,重启程序,即可正确显示字体。或者,也可以在Buildroot的Qt编译设置中,选中fontconfig support
,再在Target packages → Fonts, cursors, icons, sounds and themes
中选择一款你喜欢的字体,将字体直接加入Buildroot生成的镜像中。
在开发板上运行的效果
在Linux下搭建嵌入式Qt交叉编译环境[转载]相关推荐
- 17.2 搭建嵌入式QT运行环境
17.2 搭建嵌入式QT运行环境 17.2.1采用的嵌入式开发板介绍 嵌入式开发板: 采用友善之臂Tiny4412 Tiny4412开发板的内核.uboot.交叉编译器 均采用友善之臂光盘自带的包. ...
- Linux 下搭建 Java Web 开发环境
Linux 下搭建 Java Web 开发环境 我的小站.Github Java Web,是用Java技术来解决相关web互联网领域的技术栈,下方为 Linux 下搭建 Java Web 开发环境教程 ...
- 在linux下搭建git环境,在linux下搭建git github开发环境
在linux下搭建git github开发环境 github git linux 1.安装git sudo apt-getinstall git 2.Generating SSH keys 2.1.g ...
- 【嵌入式linux】linux上搭建嵌入式QT环境
嵌入式QT是嵌入式产品中常用的GUI,其实更像是一个C++图形库,但是可以跨平台使用,我们可以在windows开发QT程序,然后将QT程序移植到开发板上,大大方便了应用层工程师的开发.QT lib是连 ...
- 64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录
最新公司搞一个新项目,需要在Linux下进行UI界面设计.选来选去,最后选择采用Qt平台来做,于是要开始研究一下Qt. Qt作为业内最著名的UI开发工具之一,是一套完整的跨平台C++图形用户界面应用程 ...
- linux下搭建游戏服务器运行环境
最近一直只在搭建公司游戏服务器的运行环境. ps背景: 使用java开发,之前一直都是在window环境下开发的,现在要将项目部署到linux环境下 ,所以历程缓慢啊... 说说过程中都遇到啥吧! ...
- Linux下搭建asp.net运行环境
最近有个项目,是在Windows平台下开发的,需要把 asp.net web应用移植到 CentOS下,甚是头疼: 翻阅资料,发现Jexus是个可行的方案,下面是官方对Jexus的定义: 什么是Jex ...
- Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)
Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航 Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 前言 1.安装前的准备工作 2.安装交叉编译器 3.安装t ...
- 在Linux下搭建 miniGUI mStudio环境
嵌入式环境搭建准备工作 Linux操作系统:ubuntu 8.04 准备好mStudio 安装文件和运行mStudio的第三方软件 在Eclipse官方网站http://www.eclipse.org ...
最新文章
- 黄峥为何放手拼多多?数据揭秘电商平台布局背后逻辑
- 吴恩达 coursera AI 专项三第一课总结+作业答案
- 近20万奖金:天池异常检测大赛来了!
- 6个精心整理的资源网站,送给正在努力的你
- sublime-cssrem-安装与使用
- 行星齿轮设计_行星减速机内部结构图与传动原理
- 转载 webstrom识别 React语法
- 一个hitbernate配置文件,带几个表(注意mapping);如果连接字符串没有设置utf-8,向insert mysql 会产生乱码(utf8 或 utf-8)...
- [USACO08NOV]奶牛混合起来Mixed Up Cows
- android mat分析,android内存泄露MAT分析心得与注意点
- 常用视频播放器插件汇总
- oracle学习札记72
- cisco思科交换机的基本使用
- Unity 关于双叶高光(Dual lobe Specular)
- 2020年,最优秀的大数据公司有哪些?
- Java 基础.JDK 和 JRE 有什么区别
- C1认证学习五(HTTP)
- 吼 困 鸭
- 一天学会MYSQL数据库_笔记
- 项目管理软件Microsoft Project 2019和 Visio 2019下载