news 2026/5/10 9:29:06

Ubuntu系统下为Qt Creator配置ARM交叉编译工具链实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu系统下为Qt Creator配置ARM交叉编译工具链实战

1. 为什么需要ARM交叉编译环境

在嵌入式开发中,我们经常会遇到一个尴尬的情况:开发用的电脑是x86架构的,而目标设备却是ARM架构的。这就好比你想用中文写一封信,但收信人只能看懂英文。交叉编译工具链就是解决这个问题的"翻译官",它能在x86电脑上生成ARM设备能执行的代码。

我刚开始接触嵌入式开发时,最头疼的就是这个环节。明明在Ubuntu上编译运行得好好的程序,一到开发板上就跑不起来。后来才明白,普通编译器生成的是针对本地CPU架构的代码,而我们需要的是能生成ARM指令集的特殊编译器。

Qt Creator作为一款强大的跨平台IDE,支持通过配置交叉编译工具链来实现这个功能。不过说实话,第一次配置时确实踩了不少坑,比如工具链版本不匹配、Qt库编译选项不对、环境变量设置错误等等。下面我就把这几年的实战经验整理出来,手把手教你避开这些雷区。

2. 准备工作:安装必要组件

2.1 获取ARM交叉编译工具链

首先需要获取合适的交叉编译工具链。常见的有以下几种选择:

  • Linaro提供的预编译工具链
  • ARM官方提供的gcc-arm-none-eabi
  • 芯片厂商提供的定制工具链(如树莓派的tools)

我推荐新手使用Linaro的版本,兼容性好且文档齐全。以gcc-linaro-7.5.0为例,可以通过以下命令下载:

wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

解压到/opt目录是个好习惯:

sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz -C /opt

别忘了把工具链路径加入环境变量:

echo 'export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin:$PATH' >> ~/.bashrc source ~/.bashrc

验证安装是否成功:

arm-linux-gnueabihf-gcc --version

2.2 安装Qt Creator

虽然Ubuntu软件源里有Qt Creator,但版本通常比较旧。建议直接从官网下载最新版:

wget https://download.qt.io/official_releases/qtcreator/4.14/4.14.0/qt-creator-opensource-linux-x86_64-4.14.0.run chmod +x qt-creator-opensource-linux-x86_64-4.14.0.run ./qt-creator-opensource-linux-x86_64-4.14.0.run

安装过程会有图形界面向导,记得勾选"Desktop GCC"组件,后面调试本地程序时会用到。

3. 交叉编译Qt库

3.1 获取Qt源码

这一步很多教程会忽略,但非常重要。目标设备上的Qt库版本必须和开发环境一致。假设目标设备运行的是Qt 5.12.8:

wget https://download.qt.io/official_releases/qt/5.12/5.12.8/single/qt-everywhere-src-5.12.8.tar.xz tar -xvf qt-everywhere-src-5.12.8.tar.xz cd qt-everywhere-src-5.12.8

3.2 配置编译选项

创建编译配置脚本configure.sh:

#!/bin/bash ./configure \ -prefix /opt/qt5.12.8-arm \ -release \ -opensource \ -confirm-license \ -xplatform linux-arm-gnueabi-g++ \ -nomake examples \ -nomake tests \ -no-opengl \ -no-xcb \ -no-openssl \ -no-pch \ -no-dbus \ -no-glib \ -no-cups \ -no-iconv \ -skip qt3d \ -skip qtwebengine

关键参数说明:

  • -xplatform:指定交叉编译目标平台
  • -prefix:安装目录
  • -nomake examples/tests:跳过示例和测试节省时间
  • -skip:跳过不需要的模块

3.3 开始编译

先应用配置:

chmod +x configure.sh ./configure.sh

然后开始漫长的编译过程(建议喝杯咖啡):

make -j$(nproc) sudo make install

编译完成后,检查/opt/qt5.12.8-arm目录下是否生成了bin、lib等子目录。

4. 配置Qt Creator

4.1 添加qmake路径

打开Qt Creator,进入Tools > Options > Kits:

  1. 选择Qt Versions标签页
  2. 点击Add按钮
  3. 选择/opt/qt5.12.8-arm/bin/qmake
  4. 版本名称填写"Qt 5.12.8 ARM"

4.2 设置编译器

在同一个界面的Compilers标签页:

  1. 点击Add > GCC > C
  2. 名称填写"ARM GCC (C)"
  3. 路径选择/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc

重复相同步骤添加C++编译器,选择arm-linux-gnueabihf-g++。

4.3 配置调试器

在Debuggers标签页:

  1. 点击Add
  2. 名称填写"ARM GDB"
  3. 路径选择工具链中的gdb:/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb

4.4 创建构建套件(Kit)

在Kits标签页:

  1. 点击Add
  2. 名称填写"ARM Qt5.12.8"
  3. Device type选择"Generic Linux Device"
  4. 编译器选择前面配置的ARM GCC
  5. Qt version选择"Qt 5.12.8 ARM"
  6. 调试器选择"ARM GDB"

5. 实战:创建交叉编译项目

5.1 新建Qt Widgets项目

File > New File or Project > Application > Qt Widgets Application。在Kit Selection页面:

  • 勾选"Desktop Qt"用于本地调试
  • 勾选"ARM Qt5.12.8"用于交叉编译
  • 取消其他选项

5.2 配置构建目录

在Projects视图:

  1. 选择"ARM Qt5.12.8"构建套件
  2. 构建目录建议设置为../build-arm(避免与本地构建混淆)
  3. 构建模式选择Release(Debug版本需要设备上有调试符号)

5.3 部署到目标设备

在Run配置中:

  1. 添加自定义部署步骤
  2. 使用scp命令将编译好的程序上传到开发板:
scp %{buildDir}/%{target} user@device_ip:/home/user
  1. 远程执行命令配置为:
ssh user@device_ip ./%{target}

6. 常见问题排查

6.1 链接库缺失错误

如果运行时提示缺少库,需要将目标设备的库复制到开发机。例如:

scp -r root@device_ip:/usr/lib/arm-linux-gnueabihf /opt/sysroot/usr/lib

然后在Qt Creator的构建环境变量中添加:

SYSROOT=/opt/sysroot

6.2 字体显示异常

如果界面字体显示为方块,需要在开发板上安装字体:

sudo apt install ttf-wqy-zenhei

或者在代码中指定字体路径:

QFontDatabase::addApplicationFont("/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc");

6.3 触摸屏校准

嵌入式设备可能需要额外的触摸屏配置。创建一个/etc/pointercal文件:

TSLIB_TSDEVICE=/dev/input/event1 ts_calibrate

然后在Qt启动参数中添加:

export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1:rotate=0
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 9:29:03

一阶RC高通滤波器从理论到实践:建模、仿真与多平台代码实现

1. 一阶RC高通滤波器基础原理 当你第一次听说"高通滤波器"这个词时,可能会联想到音响设备上的高频调节旋钮。没错,一阶RC高通滤波器(High Pass Filter, HPF)正是用来让高频信号通过,同时衰减低频信号的电子电路。这种滤波器在信号处…

作者头像 李华
网站建设 2026/5/10 9:28:08

FlexRay车载网络技术解析与工程实践

1. FlexRay网络技术解析与工程实践 在汽车电子架构快速演进的时代,FlexRay作为确定性实时通信协议的典型代表,已成为高端车载网络的核心基础设施。我在参与某新能源车底盘控制系统开发时,曾深度应用FlexRay技术解决分布式控制单元的同步难题。…

作者头像 李华
网站建设 2026/5/10 9:26:19

果蝇大脑启发持续学习:主动遗忘与多专家协同算法解析

1. 项目概述:当果蝇大脑遇见持续学习 最近几年,持续学习(Continual Learning, CL)在机器学习领域的热度居高不下。简单来说,它希望模型能像人一样,在生命周期内不断学习新任务,同时不遗忘旧知识…

作者头像 李华
网站建设 2026/5/10 9:24:41

【审计专栏】【财务领域】【管理科学】第四十八篇 高收入人群利益链构建和利益围墙/壁垒构建方法01

编号 类型 高收入人群利益链构建和利益围墙/壁垒构建方法 方法逐步推理思考的所有方程式 参数类别 关联知识和法规法规 1 专利壁垒 构建专利丛林与组合:在核心技术和其外围、应用场景申请大量专利,形成密集的专利网络。 方程式: 1. 识别核心技术 -> 申请基础专利…

作者头像 李华
网站建设 2026/5/10 9:14:46

用微信小程序远程开关灯:STC89C51+ESP8266保姆级教程(附源码)

微信小程序STC89C51ESP8266智能灯控系统实战指南 从零搭建你的第一个物联网项目 去年夏天,我在大学宿舍里遇到了一个尴尬的问题:每次晚上躺在床上看书后,总要爬起来关台灯。这让我萌生了用手机控制台灯的想法。经过两周的折腾,终…

作者头像 李华
网站建设 2026/5/10 9:11:32

Claw:基于MCP协议为AI智能体扩展远程服务器操作能力

1. 项目概述:为AI智能体装上远程操作的“爪子”如果你和我一样,日常工作中需要频繁地在本地开发机和多台远程服务器之间切换,检查日志、修改配置、部署服务,那你肯定对“上下文切换”的疲惫感深有体会。更别提当你试图让Claude Co…

作者头像 李华