BeagleBone Black部署Qt5.11程序报错:缺失GLIBC_2.25版本
解决BeagleBone Black上Qt 5.11程序GLIBC版本不兼容的报错问题
问题本质
你遇到的错误提示./test: /lib/arm-linux-gnueabihf/libc.so.6 : version GLIBC_2.25' not found (required by /usr/local/qt5.11/lib/libQt5Core.so.5)`,核心原因很明确:你编译Qt 5.11时用的交叉编译工具链(arm-linux-gnueabihf-gcc-7.2.1-*)依赖的GLIBC版本,比BeagleBone Black系统预装的版本高。
你的BBB内核是4.15.0-bone2.1,对应的默认系统(比如Debian 9)GLIBC版本通常在2.23左右,远低于Qt编译时链接的2.25版本,所以程序运行时找不到匹配的库符号。
可行解决方案
下面按推荐优先级列出几种解决思路:
1. 重新编译Qt 5.11,绑定BBB的根文件系统(最稳妥)
这种方法能从根源上确保Qt库和BBB系统的依赖完全匹配:
- 先确认BBB上当前的GLIBC版本:
# 两种方式都可以 ldd --version /lib/arm-linux-gnueabihf/libc.so.6 - 从BBB上拷贝完整的根文件系统到开发机(比如用
rsync或者直接打包镜像挂载),路径记为/path/to/bbb/rootfs。 - 修改Qt交叉编译的配置文件(
qmake.conf),强制使用BBB根文件系统里的库:
在配置中添加:QMAKE_CFLAGS += -march=armv7-a -mtune=cortex-a8 --sysroot=/path/to/bbb/rootfs QMAKE_CXXFLAGS += -march=armv7-a -mtune=cortex-a8 --sysroot=/path/to/bbb/rootfs - 重新配置并编译Qt 5.11:
编译完成后把新的Qt库重新部署到BBB,再交叉编译你的测试程序即可。./configure -prefix /usr/local/qt5.11 -opensource -confirm-license -crosscompile -arm -xplatform linux-arm-gnueabihf-g++ -sysroot /path/to/bbb/rootfs make -j$(nproc) # 用CPU核心数加速编译 make install
2. 升级BBB系统的GLIBC版本(风险较高)
直接在BBB上把GLIBC升级到2.25及以上,但要注意:GLIBC是系统核心库,操作不当会导致系统崩溃,建议先备份系统镜像:
- 因为Debian稳定版仓库不会提供高版本GLIBC,需要手动编译安装:
- 下载GLIBC 2.25源码到BBB:
wget https://ftp.gnu.org/gnu/glibc/glibc-2.25.tar.gz tar xf glibc-2.25.tar.gz cd glibc-2.25 - 创建编译目录并配置:
mkdir build && cd build ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin - 编译安装:
make -j2 # BBB性能有限,别开太多线程 make install
- 下载GLIBC 2.25源码到BBB:
3. 静态编译测试程序(快速规避依赖)
把测试程序和Qt库、GLIBC静态链接成一个独立的可执行文件,不依赖系统库:
- 先确保你编译Qt时启用了静态编译(配置时加
-static参数)。 - 修改测试项目的
.pro文件,添加静态编译配置:CONFIG += static - 重新交叉编译程序,生成的二进制文件会大很多,但可以直接在BBB上运行,不用管系统的GLIBC版本。
总结
优先推荐第一种方案,重新编译Qt时绑定BBB的根文件系统,能彻底解决版本依赖问题,后续开发也不会再碰到类似的库兼容问题。
内容的提问来源于stack exchange,提问作者shylock
相关产品推荐
相关产品推荐

