当前位置: 首页 > news >正文

保姆级教程:在Ubuntu 20.04上为RK3588编译Qt 5.15.2的aarch64版本qmake

保姆级教程:在Ubuntu 20.04上为RK3588编译Qt 5.15.2的aarch64版本qmake

RK3588作为新一代高性能ARM处理器,正逐渐成为嵌入式开发的热门选择。而Qt作为跨平台开发框架,其强大的GUI能力和丰富的功能库,使其成为嵌入式界面开发的首选。本文将手把手教你如何在Ubuntu 20.04上为RK3588编译Qt 5.15.2的aarch64版本qmake,即使编译过程中出现错误,也能获取可用的qmake工具。

1. 环境准备与工具安装

在开始编译之前,我们需要准备好开发环境和必要的工具链。Ubuntu 20.04作为长期支持版本,提供了稳定的基础环境。

首先更新系统并安装基础依赖:

sudo apt update && sudo apt upgrade -y sudo apt install build-essential git python3 perl -y

接下来安装aarch64交叉编译工具链:

sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -y

验证工具链是否安装成功:

aarch64-linux-gnu-gcc --version

如果看到类似aarch64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0的输出,说明工具链安装正确。

2. 获取Qt源码并配置编译选项

Qt官方提供了完整的源代码包,我们需要下载与目标版本一致的源码:

wget https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz tar xvf qt-everywhere-src-5.15.2.tar.xz cd qt-everywhere-src-5.15.2

配置编译选项是关键步骤,以下是一个针对RK3588优化的配置示例:

./configure -prefix $PWD/qtbase/bin \ -opensource \ -confirm-license \ -xplatform linux-aarch64-gnu-g++ \ -no-opengl \ -nomake examples \ -nomake tests \ -skip qtscript \ -skip qtwebengine \ -skip qtlocation \ -skip qtsensors \ -skip qtconnectivity \ -skip qtwayland \ -skip qt3d

配置参数说明:

参数作用
-prefix指定安装目录
-xplatform指定目标平台
-no-opengl禁用OpenGL支持
-nomake跳过不需要的模块编译
-skip跳过特定模块

3. 处理编译过程中的常见问题

开始编译:

make -j$(nproc)

在编译过程中,可能会遇到以下常见错误:

  1. Unknown module错误

    Unknown module(s) in QT: bootstrap-private

    这通常是由于某些模块依赖关系导致的,但好消息是这些错误通常不会影响qmake的生成。

  2. 缺少依赖错误

    Project ERROR: Unknown module(s) in QT: script-private

    可以通过在配置时添加-skip qtscript来避免。

关键技巧:即使编译报错,只要生成了qmake就可以停止编译。检查是否已生成qmake:

ls qtbase/bin/qmake

如果该文件存在,就可以进入下一步配置,无需等待完整编译完成。

4. 在Qt Creator中配置开发环境

现在我们已经有了aarch64版本的qmake,接下来需要在Qt Creator中配置开发环境。

  1. 打开Qt Creator,进入工具 > 选项 > Kits
  2. 在"Qt Versions"标签页中,点击"添加"按钮
  3. 选择我们编译生成的qmake路径(qt-everywhere-src-5.15.2/qtbase/bin/qmake
  4. 点击"Apply"保存

接下来配置构建套件(Kit):

  1. 在"Kits"标签页中,点击"添加"按钮

  2. 配置如下参数:

    参数
    NameRK3588 Qt 5.15.2
    Device typeGeneric Linux Device
    Sysroot(留空或指定sysroot路径)
    Compileraarch64-linux-gnu-g++
    Qt version选择刚才添加的Qt版本
  3. 点击"OK"保存配置

5. 创建和测试ARM64项目

现在可以创建一个测试项目来验证我们的配置是否正确。

  1. 新建一个Qt Widgets Application项目
  2. 在"Kit Selection"步骤,选择我们刚创建的"RK3588 Qt 5.15.2"套件
  3. 完成项目创建后,添加一些简单的界面元素
  4. 点击"构建"按钮进行编译

编译成功后,将生成的二进制文件复制到RK3588开发板上运行测试:

scp your_app root@rk3588_ip:/home/root/ ssh root@rk3588_ip ./your_app

如果程序正常运行,说明我们的交叉编译环境配置成功。

6. 性能优化与调试技巧

为了获得更好的开发体验,这里分享几个实用技巧:

  1. 加速编译

    • 使用ccache缓存编译结果
    • make命令中添加-j$(nproc)参数使用所有CPU核心
  2. 减小体积

    aarch64-linux-gnu-strip your_app

    这个命令可以去除调试符号,显著减小可执行文件大小

  3. 调试支持: 安装gdbserver到开发板:

    sudo apt install gdbserver

    然后在开发板上运行:

    gdbserver :1234 ./your_app

    在主机上使用交叉调试器连接:

    aarch64-linux-gnu-gdb your_app (gdb) target remote rk3588_ip:1234
  4. Qt Creator远程调试: 配置Qt Creator的"设备"选项,添加RK3588开发板的SSH连接,可以实现直接在IDE中部署和调试程序

7. 常见问题解决方案

在实际开发中,可能会遇到以下问题:

  1. 运行时报错缺少库: 解决方案:

    • 在开发板上安装缺失的库
    • 或者使用静态链接编译:
      ./configure ... -static
  2. 字体显示异常: 确保开发板上安装了必要的字体:

    sudo apt install fonts-dejavu
  3. 触摸屏支持: 如果需要触摸屏支持,在配置时不要跳过tslib相关选项

  4. 高DPI显示适配: 在main函数中添加:

    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

经过多次项目实践,我发现最关键的步骤是正确配置交叉编译工具链和Qt的编译选项。即使编译过程中出现一些模块错误,只要生成了可用的qmake,就能满足大部分开发需求。对于RK3588这样的高性能ARM平台,合理配置Qt的模块可以显著提升开发效率和运行性能。

http://www.cnnetsun.cn/news/2158156.html

相关文章:

  • 基于MCP协议实现Zotero与AI助手深度集成:本地知识库智能检索与应用
  • Proton Pass Skill:将密码管理器无缝集成到自动化工作流的安全实践
  • 打造专属《全面战争》模组:RPFM工具高效入门指南
  • 终极文档下载解决方案:kill-doc让你轻松获取30+平台免费文档
  • 如何通过SQL高效处理关联子查询的更新_使用JOIN替代子查询
  • LaserGRBL:开源激光雕刻控制软件的完整入门指南
  • Vue-Excel-Editor:企业级Web表格编辑架构解决方案
  • OpenClaw 最佳实践精华版:装了三个月,我总结了15条真正有用的经验
  • Cursor估值500亿SpaceX战略期权-AI编程工具的资本逻辑
  • 7-Zip终极指南:免费开源压缩工具的高效使用技巧
  • 智能激活脚本完整指南:3步实现Windows和Office永久激活
  • 如何用智能监控系统告别京东抢购焦虑:从手动刷新到自动下单的转变
  • Fast-GitHub技术解析:基于浏览器扩展的GitHub访问优化方案
  • OpenCV 第4课 图像处理—颜色空间
  • 让旧款iPhone和iPad重获新生的神器:Legacy iOS Kit完全指南
  • 抖音批量下载终极指南:一键获取无水印视频的完整解决方案
  • 如何为OneKey钱包贡献代码:开源社区参与完整手册
  • Revelation光影包:5分钟打造Minecraft电影级视觉盛宴
  • 如何5分钟快速上手JobFunnel:零基础配置与首次抓取教程
  • 探索微信好友关系检测:基于iPad协议的开源解决方案
  • STM32F429的FSMC驱动NAND Flash,除了CubeMX配置你还需要注意这几点
  • 别让知识‘腐烂’:我用Obsidian搭建个人知识库,复刻《新概念英语》的复习之旅
  • 深入理解pydicom数据集操作:从基础元素到复杂序列的完整教程
  • 别再手动算百分比了!C语言printf的%.2f%%格式化,一行代码搞定成绩统计
  • 腾讯版“小龙虾”WorkBuddy保姆级教程:零基础开启AI自动办公新时代
  • Reddit视频制作终极指南:一键生成爆款内容动画效果
  • Rune语言入门指南:如何在Rust中嵌入动态脚本语言
  • 3分钟搞定!TegraRcmGUI图形化工具让你的Switch破解变得超简单
  • cascade最佳实践清单:10个提升用户体验的技巧
  • Logisim-Evolution 终极指南:数字电路设计的完整教程与实践应用