You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt Creator 4.0.2与BeagleBone Black交叉编译部署环境配置求助

嘿,我帮你捋清楚这个Qt交叉编译到BeagleBone Black(以下简称BBB)的问题,你遇到的错误其实是两个核心逻辑问题导致的,咱们一步步拆解解决:

先搞懂你遇到的错误根源
  1. 编译器与Qt版本不兼容:你把桌面版的Qt(x86-64架构)和ARM交叉编译器绑定到同一个套件里了——桌面Qt是给PC编译的,根本没法生成ARM架构的代码,必须用专门为ARM编译的Qt库才行。
  2. CMake路径不匹配:CMake默认会找桌面的x86编译器,你得告诉它用交叉编译的ARM编译器,这需要通过工具链文件指定。
第一步:桌面端(Ubuntu 16.04.3 64bit)补全环境

你已经装了交叉编译器、GDB multiarch和CMake,但还差ARM架构的Qt库,这是核心缺失项:

  • 先确认交叉编译器路径:打开终端跑arm-linux-gnueabihf-g++ --version,如果能输出版本信息,说明路径没问题(一般是/usr/bin/arm-linux-gnueabihf-g++);如果不行,重新安装交叉编译工具链:
    sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
    
  • 下载Qt 5.7.0源代码(必须用源码交叉编译ARM版Qt),解压后进入源码目录,准备交叉编译配置:
    1. 复制并修改ARM编译配置文件:
      cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/linux-arm-gnueabihf-g++
      
      打开新复制的qmake.conf,把里面的QMAKE_CC、QMAKE_CXX等编译器路径改成你的交叉编译器路径,比如:
      QMAKE_CC                = arm-linux-gnueabihf-gcc
      QMAKE_CXX               = arm-linux-gnueabihf-g++
      QMAKE_LINK              = arm-linux-gnueabihf-g++
      QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++
      
    2. 配置交叉编译参数(根据BBB无桌面的情况关闭不需要的模块):
      ./configure -prefix /opt/qt5.7-arm -opensource -confirm-license -release -xplatform linux-arm-gnueabihf-g++ -no-opengl -no-xcb -make libs -make tools
      
      -prefix指定ARM版Qt的安装路径,后续Qt Creator要用到这个路径。
    3. 编译安装(根据CPU核心数调整-j后面的数字,比如4核就写-j4):
      make -j4 && sudo make install
      
  • 创建CMake交叉编译工具链文件:新建toolchain-arm-linux-gnueabihf.cmake,内容如下(路径要和你的交叉编译器、ARM Qt路径对应):
    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_SYSTEM_PROCESSOR arm)
    set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc)
    set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++)
    set(CMAKE_FIND_ROOT_PATH /opt/qt5.7-arm /usr/arm-linux-gnueabihf)
    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    
第二步:重新配置Qt Creator套件

现在把正确的组件绑定到一起:

  1. 添加ARM版Qt:打开Qt Creator → 工具 → 选项 → Qt版本 → 添加,找到/opt/qt5.7-arm/bin/qmake,命名为Qt 5.7.0 ARM。
  2. 添加ARM编译器:工具 → 选项 → 编译器 → 添加 → GCC → C++,路径选/usr/bin/arm-linux-gnueabihf-g++,命名为GCC (C++, ARM 32bit);同样添加C编译器,路径/usr/bin/arm-linux-gnueabihf-gcc,命名为GCC (C, ARM 32bit)。
  3. 添加调试器:工具 → 选项 → 调试器 → 添加,路径选/usr/bin/gdb-multiarch,命名为GDB Multiarch。
  4. 配置交叉编译套件:工具 → 选项 → 套件 → 添加,命名为BBB Cross Compile:
    • Qt版本选刚才加的Qt 5.7.0 ARM
    • C/C++编译器分别选对应的ARM版本
    • 调试器选GDB Multiarch
    • CMake设置里,添加CMAKE_TOOLCHAIN_FILE参数,指向你刚才创建的工具链文件路径。
第三步:BBB目标端的必要配置

BBB上需要装Qt运行依赖和调试工具:

  1. SSH连接到BBB:ssh debian@<你的BBB IP>(默认用户名debian,密码temppwd)
  2. 更新源并安装Qt核心运行库:
    sudo apt-get update
    sudo apt-get install libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5
    
    如果你的程序用到其他Qt模块(比如串口、多媒体),对应安装libqt5serialport5、libqt5multimedia5等包。
  3. 如果需要远程调试,安装gdbserver:
    sudo apt-get install gdbserver
    
  4. 验证显示和触摸:可以装fbset看帧缓冲状态,装evtest测试触摸屏输入。
第四步:测试交叉编译与部署
  1. 在Qt Creator新建Qt Widgets项目,选择BBB Cross Compile套件。
  2. 写个简单的测试程序(比如显示一个按钮和文本)。
  3. 编译通过后,要么用Qt Creator的部署功能,要么手动用scp传到BBB:
    scp <编译后的程序路径> debian@<BBB IP>:~/
    
  4. 在BBB上运行程序:因为没有桌面环境,要指定EGLFS平台插件:
    ./<你的程序名> -platform eglfs
    
常见问题排查
  • 如果CMake还是报路径不匹配:检查工具链文件里的编译器路径和套件里的是否完全一致,项目的CMake设置里是否正确指定了工具链文件。
  • 如果程序在BBB上跑不起来:用ldd <程序名>看缺少的依赖,对应安装即可;或者确认交叉编译的Qt库和BBB的glibc版本兼容(Ubuntu 16.04用的是glibc 2.23,交叉编译器版本要匹配)。
  • 如果显示屏没输出:确认BBB的帧缓冲设备正常,运行程序时加上-platform eglfs参数,或者检查Qt的EGLFS配置。

内容的提问来源于stack exchange,提问作者Rasmus Olesen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:39:16