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

树莓派CM4运行交叉编译C++程序遇GLIBC版本缺失,求更新方案

解决树莓派CM4上GLIBC版本不兼容问题

你的问题根源是:Ubuntu 20.04默认使用的GLIBC版本(2.31)和对应的GLIBCXX版本(3.4.26),高于树莓派Raspbian Buster系统自带的GLIBC 2.28,导致编译出的程序无法在树莓派上运行。直接替换系统GLIBC风险极高,可能导致系统崩溃,推荐以下几种稳妥的解决方法:

方案一:升级树莓派系统到Raspbian 11(bullseye)

Raspbian 11自带GLIBC 2.31,完全满足程序的依赖要求,这是最彻底的解决方案:

  • 先备份系统镜像(重要,防止升级失败)
  • 修改系统源文件:
    编辑/etc/apt/sources.list和/etc/apt/sources.list.d/raspi.list,将所有buster替换为bullseye
  • 执行系统升级:
    apt update
    apt full-upgrade -y
    
  • 升级完成后重启系统,运行ldd --version验证GLIBC版本已更新到2.31

方案二:适配交叉编译环境,编译兼容旧版本GLIBC的程序

调整交叉编译工具链,让程序链接树莓派系统支持的旧版本库:

  • 下载针对Raspbian Buster的arm-linux-gnueabihf交叉编译工具链,确保其依赖的GLIBC版本为2.28
  • 编译时指定该工具链,替代Ubuntu默认的工具链
  • 或者编译时添加静态链接参数,将标准库打包进程序:
    g++ your_code.cpp -o demoApp -static-libstdc++ -static-libgcc
    
    静态编译后的程序不依赖系统的动态库,可直接在树莓派上运行

方案三:手动部署依赖库(临时测试用,不推荐长期使用)

如果不想升级系统或修改编译环境,可临时部署所需库文件:

  • 从Ubuntu 20.04的armhf仓库获取对应版本的libm.so.6和libstdc++.so.6
  • 将这些库文件放到程序所在目录的子文件夹(比如./lib/)
  • 运行程序时指定库加载路径:
    LD_LIBRARY_PATH=./lib ./demoApp
    
    注意:这种方法可能引发依赖冲突,仅适合临时验证程序功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:40:36