如何在Linux系统上配置QtCreator进行嵌入式开发?

来源:程序开发作者:小团团头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在Linux系统上配置QtCreator进行嵌入式开发?》,敬请观看详情。把QtCreator变成嵌入式交叉编译环境,第一步是装对交叉工具链。不少人直接拿x86的qmake去编ARM程序,结果生成的可执行文件在开发板上报格式错误。正确做法是在Linux主机里先部署如arm-linux-gnueabihf-gcc这类交叉编译器,再编译出对应平台的Qt库。随后于QtCreator的“构建套件”里把C/C++编译器、qmake路径和调试器逐一绑定,并指定sysroot为目标板根文件系统。若忽略设备测试与部署配置,点击运行只会本地执行。本文梳理从工具链准备到远程调试的完整流程,帮你少走弯路。

在Linux主机上用QtCreator做嵌入式开发,核心思路是让IDE调用交叉编译工具链生成能在目标板运行的程序,再通过远程方式部署和调试。这和普通桌面Qt开发最大的区别是构建环境不再是你当前系统的原生gcc,而是面向ARM、MIPS等架构的跨平台编译器。

如何在Linux系统上配置QtCreator进行嵌入式开发?

一、准备交叉编译工具链与Qt库

嵌入式开发的第一步是在Linux开发机上安装交叉编译器。以常见的ARM32开发板为例,Ubuntu或Debian系可以直接用包管理器安装arm-linux-gnueabihf系列工具:

sudo apt update
sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
arm-linux-gnueabihf-gcc --version

上面命令装好的编译器前缀是arm-linux-gnueabihf-,后续QtCreator里填编译器路径时就要指向/usr/bin/arm-linux-gnueabihf-g++。如果你用的开发板厂商提供了专属工具链,请优先用厂商包,避免glibc版本不匹配。

装完编译器后,还需要编译目标平台的Qt库。不能拿主机Qt库去链嵌入式程序,因为主机库是x86的。通常下载Qt源码后这样配置:

./configure -prefix /opt/qt5-arm 
  -opensource -confirm-license 
  -xplatform linux-arm-gnueabihf-g++ 
  -no-opengl -nomake examples
make -j$(nproc)
sudo make install

编译完成后,/opt/qt5-arm里就有针对ARM的qmake。这个qmake是后面QtCreator“Qt版本”配置的关键。若板子有特定的sysroot,配置时要加-sysroot参数指向板子根文件系统,确保头文件和库路径正确。

二、在QtCreator中配置编译器和Qt版本

打开QtCreator,进入“工具-选项-设备”,先添加嵌入式设备,类型选“通用Linux设备”,填好开发板IP、用户名和密码,点击“测试”能通过就说明SSH通了。设备配置好后再去“Kits(构建套件)”页面。

工具 -> 选项 -> Kits
  编译器: 添加 GCC -> C: /usr/bin/arm-linux-gnueabihf-gcc
                   -> C++: /usr/bin/arm-linux-gnueabihf-g++
  Qt版本: 添加 -> qmake路径: /opt/qt5-arm/bin/qmake
  调试器: 添加 -> /usr/bin/arm-linux-gnueabihf-gdb
  构建套件: 名称填 ARM-Board
           设备类型: 通用Linux设备
           设备: 选刚建好的板子
           编译器/Qt版本/调试器对应选上面项

这里最容易出错的是Qt版本检测。如果添加qmake后QtCreator报“无法识别的Qt版本”,一般是该qmake对应的Qt库是用不同主版本源码编的,或者环境变量里LD_LIBRARY_PATH干扰了qmake运行。可以在终端先直接跑一遍/opt/qt5-arm/bin/qmake -query看输出是否正常。

构建套件里的sysroot建议填开发板根文件系统目录,比如用NFS挂载的/opt/rootfs。这样链接阶段找库会更准。配置完套件,新建项目时就能在“构建套件”里看到ARM-Board,选它即是交叉构建。

三、编写测试程序并远程部署运行

新建一个Qt Widgets应用,在.pro文件里不需要特殊改动,只要套件选对,qmake会自动用ARM配置。写个简单按钮程序验证:

#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton btn("Hello Embedded");
    btn.resize(200, 100);
    btn.show();
    return a.exec();
}

这段代码在桌面和嵌入式都能编,区别只在编译出的二进制架构。点“构建”后,可以在项目构建目录下看到file命令识别为ARM可执行文件:

file arm-test
# 输出应含: ELF 32-bit LSB executable, ARM

部署方面,QtCreator的“运行”设置里选“在远程设备部署”,指定上一步建好的设备,运行程序时会通过SSH把可执行文件传到板子/tmp并启动。若板子没有屏幕,可以改用Qt的offscreen或linuxfb插件,在运行参数加-platform linuxfb。

四、远程调试与常见问题

调试嵌入式程序要用交叉gdb配合gdbserver。在开发板上运行:

gdbserver :1234 ./arm-test

然后在QtCreator的“调试-开始调试-附加到远程调试服务器”里填板子IP和端口1234,选择器选ARM-Board套件,就能下断点看变量。注意主机gdb必须是arm-linux-gnueabihf-gdb,否则架构不对会报错。

实际配置里常遇到中文乱码、库找不到的问题。乱码多是板子没装中文字体,不是Qt代码问题;库找不到则在板子用ldd查缺失项,把主机对应ARM库拷进sysroot或板子/lib。另外不要忘了给板子qt.conf指定插件路径,否则运行时报“platform plugin not found”。

问题现象可能原因解决办法
构建报cannot find -lGL主机误用桌面Qt套件项目套件改选ARM-Board
运行报not found板子缺动态库ldd查缺并复制ARM库
调试连不上gdbserver未启动或端口错板子先起gdbserver再附加

只要工具链、Qt库、套件、设备四步都对应好,QtCreator就是非常顺手的嵌入式开发环境。后续还可接入CMake或Qml工程,方法类似,只是Qt版本里换用对应qmake或cmake即可。

QtCreator嵌入式开发Linux配置修改时间:2026-08-01 19:39:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。