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

保姆级教程:在Ubuntu 22.04上为i.MX6ULL交叉编译Qt 6.6.0(含完整CMake配置与避坑指南)

保姆级教程在Ubuntu 22.04上为i.MX6ULL交叉编译Qt 6.6.0含完整CMake配置与避坑指南第一次为嵌入式设备交叉编译Qt框架时那种面对海量配置选项的茫然感我至今记忆犹新。特别是当开发板换成了NXP的i.MX6ULL这种资源受限的ARM处理器官方文档往往难以覆盖所有细节问题。本文将带你完整走一遍从环境准备到成功编译的全过程重点解决那些容易卡住新手的坑点——比如为什么必须禁用OpenGL、如何正确清理中间文件以及那个至关重要的版本匹配警告。1. 环境准备工具链与源码的精确匹配在开始之前请确保你的Ubuntu 22.04系统已经更新到最新状态。打开终端运行sudo apt update sudo apt upgrade -y1.1 安装基础依赖交叉编译Qt需要一系列基础工具以下命令会安装所有必需组件sudo apt install -y build-essential ninja-build python3 git cmake \ libgl1-mesa-dev libxkbcommon-dev libxcb-* libx11-xcb-dev \ libfontconfig1-dev libdbus-1-dev libfreetype6-dev \ libxrender-dev libxext-dev libxi-dev libxcursor-dev特别注意Ubuntu 22.04默认的CMake版本(3.22.1)已经满足Qt 6.6.0的要求但如果你的系统较旧建议通过Kitware仓库安装新版CMake。1.2 获取交叉编译工具链对于i.MX6ULL这款Cortex-A7处理器我们需要arm-linux-gnueabihf工具链。Linaro提供的GCC 14.0是一个经过充分验证的选择wget https://releases.linaro.org/components/toolchain/binaries/14.0-2023.06/arm-linux-gnueabihf/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf.tar.xz sudo tar -xvf gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf.tar.xz -C /usr/local/arm/将工具链加入系统路径echo export PATH/usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin:$PATH ~/.bashrc source ~/.bashrc验证安装arm-linux-gnueabihf-gcc --version你应该能看到类似这样的输出arm-linux-gnueabihf-gcc (Linaro GCC 14.0.0) 14.0.02. Qt源码配置的艺术2.1 获取并解压源码从Qt官方镜像下载源码包注意校验SHA256wget https://download.qt.io/official_releases/qt/6.6/6.6.0/single/qt-everywhere-src-6.6.0.tar.xz tar -xvf qt-everywhere-src-6.6.0.tar.xz cd qt-everywhere-src-6.6.02.2 编写关键工具链文件在源码根目录创建toolchain.cmake这是整个交叉编译过程的核心# toolchain.cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CROSS_COMPILER /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf) set(CMAKE_C_COMPILER ${CROSS_COMPILER}-gcc) set(CMAKE_CXX_COMPILER ${CROSS_COMPILER}-g) set(CMAKE_SYSROOT /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -marcharmv7-a -mfpuneon -mfloat-abihard -stdc17) set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)这个文件做了几件重要事情指定了目标系统为Linux ARM设置了交叉编译器路径配置了适合i.MX6ULL的编译标志(-marcharmv7-a等)定义了库和头文件的搜索规则2.3 定制mkspecs文件i.MX6ULL需要特定的设备配置。在qtbase/mkspecs/devices/下创建linux-imx6ull-g目录添加以下内容# qmake configuration for i.MX6ULL include(../common/linux_device_pre.conf) QMAKE_CFLAGS -marcharmv7-a -mfpuneon -mfloat-abihard QMAKE_CXXFLAGS $$QMAKE_CFLAGS QMAKE_LFLAGS -static-libstdc QMAKE_CC $$[QT_SYSROOT]/usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc QMAKE_CXX $$[QT_SYSROOT]/usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g QMAKE_LINK $$QMAKE_CXX QMAKE_LINK_SHLIB $$QMAKE_CXX QMAKE_INCDIR_POST \ $$[QT_SYSROOT]/usr/include \ $$[QT_SYSROOT]/usr/include/arm-linux-gnueabihf3. CMake配置的精细调校3.1 基础配置选项在源码目录外创建构建目录并进入mkdir build cd build然后运行CMake配置关键参数解释见下表cmake ../qt-everywhere-src-6.6.0 \ -GNinja \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_TOOLCHAIN_FILE../qt-everywhere-src-6.6.0/toolchain.cmake \ -DCMAKE_INSTALL_PREFIX/opt/qt6-imx6ull \ -DQT_HOST_PATH/opt/qt6-host \ -DQT_QMAKE_TARGET_MKSPECdevices/linux-imx6ull-g \ -DQT_QPA_PLATFORMlinuxfb参数作用i.MX6ULL特殊要求-GNinja使用Ninja构建系统比Make更快CMAKE_TOOLCHAIN_FILE指定交叉编译配置必须准确设置QT_QPA_PLATFORM图形后端使用linuxfb而非xcb3.2 功能模块的精简策略i.MX6ULL的资源有限需要禁用不必要的模块cmake .. -DFEATURE_openglOFF \ -DINPUT_openglno \ -DFEATURE_xcbOFF \ -DFEATURE_tslibOFF \ -DINPUT_tslibno \ -DFEATURE_graphsOFF \ -DINPUT_graphsno \ -DBUILD_qtgraphsOFF \ -DQT_BUILD_EXAMPLESOFF \ -DQT_BUILD_TESTSOFF \ -DQT_FEATURE_brotliOFF为什么必须禁用OpenGLi.MX6ULL的Vivante GPU驱动与Qt 6的OpenGL实现存在兼容性问题在嵌入式环境下使用framebuffer是更可靠的选择。4. 构建与安装的实战技巧4.1 并行编译优化使用Ninja进行并行编译根据CPU核心数调整cmake --build . --parallel $(nproc)如果遇到构建失败先清理再重试rm -rf CMakeCache.txt CMakeFiles/ cmake_install.cmake qtbase/CMakeFiles qtbase/CMakeCache.txt4.2 安装到目标目录sudo cmake --install .安装完成后检查目标目录是否包含以下关键内容/opt/qt6-imx6ull ├── bin ├── lib ├── mkspecs └── plugins4.3 验证编译结果创建一个简单的测试程序验证工具链// test.cpp #include QCoreApplication #include QDebug int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() Qt qVersion() on ARM!; return a.exec(); }使用qmake构建/opt/qt6-imx6ull/bin/qmake -project /opt/qt6-imx6ull/bin/qmake make file test输出应显示ARM可执行文件test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked...5. 部署到开发板的注意事项5.1 文件系统布局在开发板文件系统上建议采用与主机相同的路径/opt/qt6-imx6ull这样可以直接使用相同的库路径配置。5.2 环境变量配置在开发板的/etc/profile中添加export QT_QPA_PLATFORMlinuxfb export QT_QPA_FB_DRM1 export LD_LIBRARY_PATH/opt/qt6-imx6ull/lib:$LD_LIBRARY_PATH5.3 调试技巧如果应用程序启动失败尝试使用ldd检查库依赖设置QT_DEBUG_PLUGINS1查看插件加载情况通过export QT_LOGGING_RULESqt.qpa.*true获取平台抽象层日志6. 常见问题解决方案Q编译过程中出现undefined reference to...错误A这通常是工具链不匹配导致的。检查开发板系统是否与工具链的glibc版本匹配是否所有依赖库都有ARM版本清理构建目录后重新配置Q应用程序启动时卡在Initializing...A尝试禁用硬件加速export QT_QPA_FB_DRM0指定显式设备export QT_QPA_FB/dev/fb0Q如何减小最终生成的Qt库体积A在CMake配置时添加-DQT_FEATURE_optimize_sizeON \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATIONON在i.MX6ULL上实际部署时最耗时的往往不是编译过程本身而是各种环境因素的调试。记得在开发板上保留足够的存储空间至少500MB因为即使经过精简Qt 6的基础库仍然会占用约200MB空间。

相关文章:

保姆级教程:在Ubuntu 22.04上为i.MX6ULL交叉编译Qt 6.6.0(含完整CMake配置与避坑指南)

保姆级教程:在Ubuntu 22.04上为i.MX6ULL交叉编译Qt 6.6.0(含完整CMake配置与避坑指南) 第一次为嵌入式设备交叉编译Qt框架时,那种面对海量配置选项的茫然感我至今记忆犹新。特别是当开发板换成了NXP的i.MX6ULL这种资源受限的ARM处…...

实时手机检测-通用多场景落地:电商验货、海关安检、回收分拣案例解析

实时手机检测-通用多场景落地:电商验货、海关安检、回收分拣案例解析 1. 引言:手机检测,比你想象的更有用 你有没有想过,一个能快速、准确识别出图片或视频里手机的AI模型,到底能用在什么地方? 可能你会…...

用Multisim/TINA-TI仿真带你玩转一阶到二阶有源滤波器:从传递函数到实际频响曲线全验证

从仿真到实践:一阶与二阶有源滤波器的可视化验证指南 在模拟电路设计中,滤波器是信号处理的基础模块。许多初学者虽然能推导传递函数,却难以将理论公式与实际电路行为建立直观联系。本文将用Multisim和TINA-TI两款主流仿真工具,带…...

解决抖音直播数据实时采集难题的全栈方案:DouyinLiveWebFetcher实战指南

解决抖音直播数据实时采集难题的全栈方案:DouyinLiveWebFetcher实战指南 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2024最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 副…...

OpenClaw故障自愈方案:百川2-13B模型异常日志分析与重试机制

OpenClaw故障自愈方案:百川2-13B模型异常日志分析与重试机制 1. 问题背景与需求场景 上周我在用OpenClaw对接百川2-13B模型处理夜间自动化任务时,遇到了一个典型问题:凌晨3点突然收到飞书告警,显示"模型响应超时"。当…...

FLUX.1-dev像素模型效果展示:从草图提示词到高保真像素图全过程

FLUX.1-dev像素模型效果展示:从草图提示词到高保真像素图全过程 1. 像素幻梦创意工坊介绍 像素幻梦 (Pixel Dream Workshop) 是一款基于 FLUX.1-dev扩散模型构建的下一代像素艺术生成工具。它采用明亮的16-bit像素工坊视觉设计,为创作者提供沉浸式的AI…...

18650圆柱锂电池电化学模型与Comsol锂电模型参数化研究及电化生热分析结果图集

18650圆柱锂电池模型电化学模型,comsol锂电模型参数已配置,电化学生热研究,三种放电倍率,参数化扫描,各种结果图都有。今天我们来聊聊18650圆柱锂电池的电化学模型,尤其是在COMSOL中的实现。说到锂电池&…...

手把手教你用超级千问语音设计世界制作游戏剧情配音

手把手教你用超级千问语音设计世界制作游戏剧情配音 1. 为什么游戏开发者需要语音设计工具 在游戏开发过程中,配音往往是最容易被忽视却又至关重要的环节。传统配音方式面临三大痛点: 成本高昂:专业配音演员费用动辄上千元每分钟效率低下&…...

NUS-WIDE数据集实战:从原始文件到多模态数据集的完整预处理指南

1. NUS-WIDE数据集简介与下载指南 NUS-WIDE是一个经典的多标签图像数据集,由新加坡国立大学的研究团队构建。这个数据集包含了269,648个样本和81个类别,每个样本可能同时属于多个类别(这就是多标签的含义)。数据集最初是为了研究网…...

HunyuanVideo-Foley惊艳效果:AI生成神经反馈音乐与脑波同步音效实验

HunyuanVideo-Foley惊艳效果:AI生成神经反馈音乐与脑波同步音效实验 1. 技术背景与核心能力 HunyuanVideo-Foley是一款突破性的AI音视频生成系统,专为创造沉浸式多媒体体验而设计。该系统最引人注目的能力在于其神经反馈音乐生成技术,能够根…...

Electron应用打包体积优化实战:从30MB瘦身到15MB,我的electron-builder.yml配置清单

Electron应用打包体积优化实战:从30MB瘦身到15MB 最近在优化一个Electron应用的打包体积时,发现初始生成的安装包竟然达到了30MB。经过一系列配置调整和优化,最终成功将体积缩减到15MB。这个过程让我深刻体会到,electron-builder…...

Z-Image-Turbo-rinaiqiao-huiyewunv 数据预处理管道构建:使用Python自动化准备训练数据

Z-Image-Turbo-rinaiqiao-huiyewunv 数据预处理管道构建:使用Python自动化准备训练数据 你是不是也遇到过这样的情况:好不容易找到了一个心仪的图像生成模型,比如Z-Image-Turbo-rinaiqiao-huiyewunv,想用自己的数据训练一下&…...

从nvidia-smi到npu-smi:给CUDA开发者的华为昇腾NPU监控指南

从nvidia-smi到npu-smi:CUDA开发者快速掌握昇腾NPU监控的实战手册 当你的技术栈从英伟达GPU扩展到华为昇腾NPU时,监控工具的使用体验就像从自动挡切换到手动挡——虽然最终目的地相同,但操作逻辑需要重新适应。作为曾经每天与nvidia-smi打交道…...

EcomGPT-中英文-7B电商模型Vue前端集成:打造智能电商管理后台

EcomGPT-中英文-7B电商模型Vue前端集成:打造智能电商管理后台 你是不是也遇到过这样的场景?作为电商运营,每天要写几十条商品描述、营销文案,绞尽脑汁也想不出新花样;面对海量的用户评论,想快速了解用户情…...

Qwen3-Reranker-0.6B效果展示:代码搜索Query ‘Python list to dict‘重排

Qwen3-Reranker-0.6B效果展示:代码搜索Query Python list to dict重排 今天咱们来聊聊一个特别实用的AI工具——Qwen3-Reranker-0.6B。你可能听说过各种大语言模型,但这个模型有点不一样,它专门干一件事:帮你从一堆文本里找出最相…...

告别fdisk!用parted命令轻松管理4TB以上大硬盘(附实战案例)

告别fdisk!用parted命令轻松管理4TB以上大硬盘(附实战案例) 当你的NAS存储阵列需要扩容到8TB,或是数据库服务器要配置12TB的RAID组时,传统的fdisk工具会在第一个指令就给你泼冷水——它根本不认识超过2TB的磁盘空间。这…...

OpenClaw+Qwen3-32B科研助手:文献综述自动化实践

OpenClawQwen3-32B科研助手:文献综述自动化实践 1. 为什么需要自动化文献综述 作为一名计算机视觉方向的博士生,我每周需要阅读数十篇论文。传统的工作流程是:手动下载PDF→逐篇阅读→摘录关键观点→整理成表格。这个过程不仅耗时&#xff…...

CentOS虚拟机启动卡在紧急模式?别慌,手把手教你用xfs_repair修复XFS元数据损坏

CentOS虚拟机启动卡在紧急模式?手把手教你用xfs_repair拯救XFS元数据 当你正准备开始一天的工作,突然发现CentOS虚拟机无法正常启动,屏幕上赫然显示着"emergency mode"的红色警告。这种突如其来的系统崩溃,往往让运维人…...

Mac开发者必备:OpenClaw对接Qwen3-32B镜像开发环境配置

Mac开发者必备:OpenClaw对接Qwen3-32B镜像开发环境配置 1. 为什么选择OpenClawQwen3-32B组合 去年我在开发一个自动化文档处理工具时,发现常规的RPA方案无法处理非结构化数据。直到尝试将OpenClaw与Qwen3-32B结合,才真正实现了"理解-决…...

Chandra OCR真实测评:对比GPT-4o,开源OCR模型表现如何

Chandra OCR真实测评:对比GPT-4o,开源OCR模型表现如何 最近在整理一堆扫描版的实验报告和学术论文,里面混杂着复杂的表格、手写注释和数学公式,真是让人头疼。传统的OCR工具,比如Tesseract,处理这种文档就…...

Tauri开发手记——1.从零到一:环境搭建与首次构建实战

1. 环境准备:从零搭建Tauri开发环境 第一次接触Tauri开发时,环境搭建往往是最让人头疼的环节。作为一个跨平台桌面应用框架,Tauri需要同时处理前端和后端(Rust)的依赖关系。我在Windows系统上踩过不少坑,现…...

Vite 8 架构革新:从双引擎到 Rolldown 统一打包的演进之路

1. Vite 8 架构革新的背景与痛点 如果你用过 Vite 7 或更早版本,一定对它的闪电般开发体验印象深刻。这主要得益于 Vite 独特的双引擎架构:开发时用 esbuild 实现毫秒级启动,生产环境则用 Rollup 保证打包质量。但我在实际项目中发现&#xf…...

Mac Mouse Fix终极指南:重新定义macOS鼠标交互体验的开源解决方案

Mac Mouse Fix终极指南:重新定义macOS鼠标交互体验的开源解决方案 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 在macOS生态系统中&#xff0…...

C 语言从 0 入门(一)|VS2022 完整环境搭建 + 第一个 C 语言程序详解

大家好,我是网域小星球。前面的 Wireshark 抓包实战系列已经全部完结,从本文开始,正式开启一个全新的学习板块:C 语言从 0 到实战入门。 作为网络工程、计算机相关专业的核心基础语言,C 语言贴近计算机底层&#xff0…...

电缆电热耦合与热仿真:COMSOL中电缆铺设的热分析模拟与应用研究

电缆电热耦合仿真 comsol 电缆铺设热仿真电缆散热设计这事看起来简单,实操起来全是坑。上个月给某变电站做电缆沟热仿真,甲方拿着计算器咔咔按公式说肯定没问题,结果实测温度超了十几度。后来用COMSOL重新建模才发现,土壤热阻和邻…...

FireRedASR-AED-L语音搜索应用:电商场景实战

FireRedASR-AED-L语音搜索应用:电商场景实战 1. 引言 想象一下这个场景:一位正在做饭的用户手上沾满面粉,突然想起需要购买烘焙材料,只需对着手机说"帮我找高筋面粉",下一秒就能看到精准的商品搜索结果。这…...

弦音墨影保姆级教程:解决‘米色宣纸背景不显示’‘朱砂按钮无响应’等常见问题

弦音墨影保姆级教程:解决‘米色宣纸背景不显示’‘朱砂按钮无响应’等常见问题 1. 引言:优雅水墨AI的实用指南 「弦音墨影」是一款将尖端人工智能技术与中国传统美学深度融合的视频理解与视觉定位系统。它以"水墨丹青"为视觉灵魂&#xff0c…...

nlp_structbert_sentence-similarity_chinese-large部署教程:NVIDIA Container Toolkit深度配置

nlp_structbert_sentence-similarity_chinese-large部署教程:NVIDIA Container Toolkit深度配置 1. 项目概述 今天要介绍的是一个特别实用的中文语义相似度分析工具——基于StructBERT-Large模型开发的本地化解决方案。这个工具专门解决中文句子对的语义匹配问题&…...

WorkshopDL:跨平台Steam创意工坊下载器,突破平台限制获取海量模组资源

WorkshopDL:跨平台Steam创意工坊下载器,突破平台限制获取海量模组资源 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾在Epic Games或GOG平台购…...

使用ComfyUI搭建可视化DeOldify工作流

使用ComfyUI搭建可视化DeOldify工作流 想给家里的老照片上色,但觉得写代码太麻烦?或者想把手头的黑白视频变成彩色,却不知道从何下手?今天,我们就来聊聊一个特别有意思的玩法:用ComfyUI这个可视化工具&…...