Qt Creator 4.0.2与BeagleBone Black交叉编译部署环境配置求助
嘿,我帮你捋清楚这个Qt交叉编译到BeagleBone Black(以下简称BBB)的问题,你遇到的错误其实是两个核心逻辑问题导致的,咱们一步步拆解解决:
先搞懂你遇到的错误根源
- 编译器与Qt版本不兼容:你把桌面版的Qt(x86-64架构)和ARM交叉编译器绑定到同一个套件里了——桌面Qt是给PC编译的,根本没法生成ARM架构的代码,必须用专门为ARM编译的Qt库才行。
- 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),解压后进入源码目录,准备交叉编译配置:
- 复制并修改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++ - 配置交叉编译参数(根据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要用到这个路径。 - 编译安装(根据CPU核心数调整
-j后面的数字,比如4核就写-j4):make -j4 && sudo make install
- 复制并修改ARM编译配置文件:
- 创建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套件
现在把正确的组件绑定到一起:
- 添加ARM版Qt:打开Qt Creator → 工具 → 选项 → Qt版本 → 添加,找到
/opt/qt5.7-arm/bin/qmake,命名为Qt 5.7.0 ARM。 - 添加ARM编译器:工具 → 选项 → 编译器 → 添加 → GCC → C++,路径选
/usr/bin/arm-linux-gnueabihf-g++,命名为GCC (C++, ARM 32bit);同样添加C编译器,路径/usr/bin/arm-linux-gnueabihf-gcc,命名为GCC (C, ARM 32bit)。 - 添加调试器:工具 → 选项 → 调试器 → 添加,路径选
/usr/bin/gdb-multiarch,命名为GDB Multiarch。 - 配置交叉编译套件:工具 → 选项 → 套件 → 添加,命名为
BBB Cross Compile:- Qt版本选刚才加的
Qt 5.7.0 ARM - C/C++编译器分别选对应的ARM版本
- 调试器选
GDB Multiarch - CMake设置里,添加
CMAKE_TOOLCHAIN_FILE参数,指向你刚才创建的工具链文件路径。
- Qt版本选刚才加的
第三步:BBB目标端的必要配置
BBB上需要装Qt运行依赖和调试工具:
- SSH连接到BBB:
ssh debian@<你的BBB IP>(默认用户名debian,密码temppwd) - 更新源并安装Qt核心运行库:
如果你的程序用到其他Qt模块(比如串口、多媒体),对应安装sudo apt-get update sudo apt-get install libqt5core5a libqt5gui5 libqt5widgets5 libqt5network5libqt5serialport5、libqt5multimedia5等包。 - 如果需要远程调试,安装gdbserver:
sudo apt-get install gdbserver - 验证显示和触摸:可以装
fbset看帧缓冲状态,装evtest测试触摸屏输入。
第四步:测试交叉编译与部署
- 在Qt Creator新建Qt Widgets项目,选择
BBB Cross Compile套件。 - 写个简单的测试程序(比如显示一个按钮和文本)。
- 编译通过后,要么用Qt Creator的部署功能,要么手动用scp传到BBB:
scp <编译后的程序路径> debian@<BBB IP>:~/ - 在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
相关产品推荐
相关产品推荐

