保姆级教程:在Ubuntu 22.04上为i.MX6ULL交叉编译QT6.6.0(含完整toolchain.cmake配置)

张开发
2026/4/11 23:47:29 15 分钟阅读

分享文章

保姆级教程:在Ubuntu 22.04上为i.MX6ULL交叉编译QT6.6.0(含完整toolchain.cmake配置)
保姆级教程在Ubuntu 22.04上为i.MX6ULL交叉编译QT6.6.0含完整toolchain.cmake配置嵌入式开发中QT框架因其跨平台特性和丰富的UI组件库而广受欢迎。但对于刚接触嵌入式QT开发的新手来说如何正确配置交叉编译环境往往是个令人头疼的问题。本文将手把手带你完成在Ubuntu 22.04系统上为NXP i.MX6ULL开发板交叉编译QT6.6.0的全过程从工具链配置到最终安装每个步骤都配有详细说明和避坑指南。1. 环境准备与工具链安装在开始之前我们需要确保Ubuntu 22.04系统已经安装了必要的依赖包。打开终端执行以下命令sudo apt update sudo apt install -y build-essential cmake ninja-build git python3 \ libgl1-mesa-dev libxcb-xinerama0-dev libfontconfig1-dev \ libfreetype6-dev libx11-dev libxext-dev libxfixes-dev \ libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev \ libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev \ libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \ libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev \ libxcb-render-util0-dev libxkbcommon-dev libxkbcommon-x11-dev接下来我们需要下载并安装适用于i.MX6ULL的交叉编译工具链。这里我们使用gcc-linaro-14.0.0版本wget https://releases.linaro.org/components/toolchain/binaries/14.0.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/添加工具链到系统PATH环境变量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 --version2. 获取QT6.6.0源码并配置编译环境首先下载QT6.6.0源码包wget 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.0创建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} -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)接下来我们需要为i.MX6ULL创建特定的设备配置。在qtbase/mkspecs/devices/目录下创建linux-imx6ull-g文件夹并添加qmake.conf文件mkdir -p qtbase/mkspecs/devices/linux-imx6ull-g# qmake.conf include(../common/linux_device_pre.conf) QMAKE_CFLAGS -marcharmv7-a -mfpuneon -mfloat-abihard QMAKE_CXXFLAGS $$QMAKE_CFLAGS QMAKE_LFLAGS -static-libstdc QMAKE_CC /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc QMAKE_CXX /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g QMAKE_LINK /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g QMAKE_LINK_SHLIB /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g QMAKE_AR /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar cqs QMAKE_OBJCOPY /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-objcopy QMAKE_STRIP /usr/local/arm/gcc-linaro-14.0.0-2023.06-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip QMAKE_INCDIR_POST \ $$[QT_SYSROOT]/usr/include \ $$[QT_SYSROOT]/usr/include/arm-linux-gnueabihf3. 配置QT编译选项现在我们可以开始配置QT的编译选项了。创建一个构建目录并进入mkdir build cd build执行CMake配置命令cmake ../ \ -GNinja \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_TOOLCHAIN_FILE../toolchain.cmake \ -DCMAKE_INSTALL_PREFIX/opt/qt6-arm \ -DCMAKE_STAGING_PREFIX/opt/qt6-arm \ -DQT_HOST_PATH/opt/qt6-host \ -DQT_QMAKE_TARGET_MKSPECdevices/linux-imx6ull-g \ -DQT_QPA_PLATFORMlinuxfb \ -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关键参数解释-GNinja: 使用Ninja作为构建系统比Make更快-DCMAKE_TOOLCHAIN_FILE: 指定我们之前创建的交叉编译工具链文件-DQT_QPA_PLATFORMlinuxfb: 指定使用Linux帧缓冲作为显示后端-DFEATURE_openglOFF: 禁用OpenGL支持因为i.MX6ULL没有硬件加速-DCMAKE_INSTALL_PREFIX: 指定QT的安装路径4. 编译与安装QT配置完成后我们可以开始编译QT了。使用以下命令进行并行编译cmake --build . --parallel $(nproc)编译过程可能需要几个小时具体时间取决于你的系统性能。编译完成后执行安装命令sudo cmake --install .安装完成后QT将被安装到/opt/qt6-arm目录下。为了验证安装是否成功可以检查目标目录ls /opt/qt6-arm你应该看到类似以下的目录结构bin include lib libexec mkspecs plugins qml translations5. 配置开发环境与测试为了在开发主机上使用交叉编译的QT我们需要配置一些环境变量。创建一个名为qt6-arm-env.sh的脚本#!/bin/bash export QT_HOST_PATH/opt/qt6-host export QT_TARGET_PATH/opt/qt6-arm export PATH$QT_TARGET_PATH/bin:$PATH export PKG_CONFIG_PATH$QT_TARGET_PATH/lib/pkgconfig:$PKG_CONFIG_PATH export LD_LIBRARY_PATH$QT_TARGET_PATH/lib:$LD_LIBRARY_PATH要测试交叉编译环境是否正常工作可以创建一个简单的QT应用程序// main.cpp #include QApplication #include QLabel int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label(Hello, i.MX6ULL!); label.show(); return app.exec(); }使用qmake生成Makefile并编译qmake -project qmake make编译完成后将生成的可执行文件复制到i.MX6ULL开发板上运行测试。6. 常见问题与解决方案在交叉编译QT6.6.0的过程中可能会遇到以下常见问题编译失败找不到头文件确保CMAKE_SYSROOT路径设置正确检查工具链的include目录是否存在链接失败找不到库文件确认CMAKE_FIND_ROOT_PATH设置正确检查工具链的lib目录是否存在运行时错误找不到QT插件确保QT的plugins目录被正确部署到开发板设置QT_PLUGIN_PATH环境变量指向插件目录性能问题应用程序运行缓慢确认使用了正确的硬件加速选项考虑禁用不需要的QT模块以减少资源占用显示问题无法打开显示检查QT_QPA_PLATFORM设置是否正确确保开发板上的帧缓冲设备(/dev/fb0)存在且可访问对于更复杂的问题建议查看编译日志和QT的文档或者在相关开发者社区寻求帮助。

更多文章