文章目录
前言
在大多数的情况下,Qt 库通常是在目标开发板的操作系统安装时安装的。这意味着,Qt 库作为操作系统的一部分已经预先安装在arm目标开发板文件系统中,并且与操作系统的版本和架构兼容。因此作为Qt arm 应用程序开发人员,每当遇到一款新架构arm设备,在搭建开发环境时,需要注意两件事:
- 下载的Qt库与开发板上预装的Qt库版本保持尽量一致,至少必须兼容。
- 编译Qt库和应用程序使用的交叉工具链与预装Qt库的工具链保持一致。
由于项目需要在STM32MP157-A7设备上使用Qt开发应用程序,再次进行了开发环境搭建,记录下整个过程,除了供未来查询需要,也为其他有相同需求的同仁提供一点参考。
与Qt4 安装到ubuntu22.04一样,如果希望在ubuntu中编译和安装qt5 for arm 源码库,也需要降低GCC的版本。我们通过使用 update-alternatives
命令来切换版本,即在不同版本的 GCC 和 G++ 之间进行切换,完成对QT5编译和安装。
前期的项目中,在我们已经将调试环境设置为双架构Kits
,qt5 for ubuntu,qt4 for arm,本次我们在增加一个调试环境:qt5 for arm。
事实上,为原有系统再增加一个Qt5调试环境Kit,除了无需重新安装qtcreator,与新安装一个Qt5 Kit并无太大不同。
本文是在chatgpt的帮助下完成的,所有的步骤都亲测有效。
感谢朋友提供的chatgpt软件,特别是其中的gpt-box桌面工具,更是我离不开的工具。感兴趣的同仁可前往一观
www.apsuai.com
1、下载Qt库
https://download.qt.io/archive/qt/5.12/5.12.9/single/
2、下载交叉工具链
下载工具链 gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz
https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/
- 将下载的交叉工具链gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz,拷贝到/opt,解压:
tar -xvf gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz
- 将解压缩的工具链目录添加到环境变量中,例如添加以下行到 ~/.bashrc 文件最后:
vim ~/.bashrc
export PATH=$PATH:/opt/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
- 运行 source ~/.bashrc 命令以更新环境变量。
source ~/.bashrc
- 验证一下:
arm-none-linux-gnueabihf-gcc -v
成功:
。。。
gcc 版本 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))
3、环境准备
3.1 安装必要的依赖库
sudo apt-get install build-essential libfontconfig1 mesa-common-dev libglu1-mesa-dev libpulse-dev libicu-dev libsqlite3-dev libssl-dev libxcb-xinerama0-dev libxkbcommon-dev libxkbcommon-x11-dev libasound2-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev python3
3.2 检查python,解决找不到python错误
which python3
结果:
/usr/bin/python3
编译Qt库源代码时可能出现找不到python错误,如下处理可以解决
sudo cp /usr/bin/python3 /usr/bin/python
3.3 安装GCC版本9
在 Ubuntu 上安装 GCC 9 可以通过以下步骤实现:
- 添加 GCC 开发工具包(PPA)到软件源列表。打开终端并输入以下命令:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
- 安装 GCC 9 及所有的补丁。在终端中输入以下命令:
sudo apt install gcc-9 g++-9
- 检查 GCC 是否已成功安装。在终端中输入以下命令来验证 GCC 版本:
gcc-9 --version
g++-9 --version
3.4 使用alternatives工具管理gcc优先级
使用alternatives工具管理gcc优先级,先将两个版本的gcc和g++加入到alternativers。
在 Linux 系统中,可能会安装多个版本的 GCC(GNU Compiler Collection),每个版本可能会提供不同的功能或优化。alternatives 工具提供了一种简单的方式来管理这些不同版本的 GCC,并设置默认的版本以供使用。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 90
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 90
3.5 使用alternatives工具手动切换gcc版本
在使用update-alternatives
命令安装多个gcc版本和g++之后,您可以使用下面的命令手动切换当前系统使用的默认编译器:
sudo update-alternatives --config gcc
这个命令将会显示一个类似下面的提示信息,在其中列出了系统中已经安装的所有gcc版本:
linux@linux-virtual-machine:~$ sudo update-alternatives --config gcc
有 2 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/bin/gcc-9 100 自动模式
1 /usr/bin/gcc-11 90 手动模式
2 /usr/bin/gcc-9 100 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:0
sudo update-alternatives --config g++
这个命令将会显示一个类似下面的提示信息,在其中列出了系统中已经安装的所有g++版本:
linux@linux-virtual-machine:~$ sudo update-alternatives --config g++
有 2 个候选项可用于替换 g++ (提供 /usr/bin/g++)。
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/bin/g++-9 100 自动模式
1 /usr/bin/g++-11 90 手动模式
2 /usr/bin/g++-9 100 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:
您可以输入要切换到的gcc版本的数字或者直接按下回车键使用当前选择的编译器,然后系统会自动配置当前默认的编译器。
4、QT5编译、安装
首先让当前登录用户获得/opt文件夹所有权:
sudo chown -R linux:linux /opt
- 将第1节下载的的QT5.12.9源码拷贝/opt,解压:
sudo cp qt-everywhere-src-5.12.9.tar.xz /opt
tar -xvf qt-everywhere-src-5.12.9.tar.xz
- 进入 qt-everywhere-src-5.12.9 目录
cd qt-everywhere-src-5.12.9
cd qtbase
cd mkspecs
cd linux-arm-gnueabihf-g++
- 编辑qmake.conf
vim qmake.conf
- 文件编辑结果如下:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = arm-none-linux-gnueabihf-gcc
QMAKE_CXX = arm-none-linux-gnueabihf-g++
QMAKE_LINK = arm-none-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabihf-objcopy
QMAKE_NM = arm-none-linux-gnueabihf-nm -P
QMAKE_STRIP = arm-none-linux-gnueabihf-strip
load(qt_config)
- 配置编译参数:
在解压源代码后,需要对编译参数进行配置,并指定目标平台、交叉编译器、库文件等信息。具体的编译参数可以参考 Qt 官方文档或手册,或通过 ./configure -h 命令进行查看。
回到 qt-everywhere-src-5.12.9 目录,执行下面指令:
./configure -prefix /home/linux/qt5-arm -xplatform linux-arm-gnueabi-g++ -no-opengl
在Qt应用开发中,OpenGL 主要用于图形渲染和创建三维图形界面,可提高应用界面的交互性和可视化效果,为用户带来更好的用户体验。由于配置时加上OpenGL编译无法通过。出错界面如下:
。。。
ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.
因此,暂时将其移除。如果有了解决方案,再进行补充。(或有哪位读者对此有经验,欢迎在留言区赐教)
- 编译并安装程序包
$ make -j8
$ sudo make install
5、配置qtcreator,增加Qt5 for arm Kit
- 打开 Qt Creator,选择「工具」-「选项」-「构建和运行」 - 「Qt Versions」,界面如图:
- 切换到「Kits」,点击「Add」,进行如下图配置,点击「应用」和「确定」保存设置
-新建项目时,在Kits选择页面,会显示本次增加的arm-qt5 Kit选项:
到此,ubuntu22.04上添加STM32MP157、Qt5开发环境工作完成。
总结
前期的项目中,在我们已经将调试环境设置为双架构Kits
,qt5 for ubuntu 和qt4 for arm,本次我们为STM32MP157-A7设备增加一个调试环境:qt5 for arm。
大多数arm设备,Qt 库会作为操作系统的一部分预先安装在设备文件系统中,因此对于arm Qt 应用程序开发人员,每当遇到一款新架构arm设备,在搭建开发环境时,首先需要确定两件事(1)下载的Qt库与开发板上预装的Qt库版本保持尽量一致,至少必须兼容。(2) 编译Qt库和应用程序使用的交叉工具链与预装Qt库的工具链保持一致。
本文介绍了为STM32MP157-A7设备搭建Qt5 for arm开发环境搭建过程。