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

Qt结合OpenCV为树莓派4交叉编译时出现依赖及未定义引用错误

问题根源

undefined reference to std::random_device::_M_getentropy() const@GLIBCXX_3.4.25错误本质是交叉编译工具链的libstdc版本和树莓派sysroot中使用的libstdc版本不匹配:

  • GLIBCXX_3.4.25对应GCC 8.x版本,若你主机的交叉编译器版本高于树莓派系统自带的GCC版本,编译时会链接高版本libstdc的独有符号,但sysroot内的低版本libstdc不存在该符号,就会触发报错
  • 你主机安装的OpenCV 4.5不会影响当前编译:你的.pro配置已经明确指定了链接树莓派sysroot下的OpenCV 3.2库,只要路径配置正确,不会调用主机x86架构的OpenCV 4.5文件
解决步骤
  1. 先确认树莓派系统的libstdc++支持版本:
    在树莓派终端执行命令strings /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 | grep GLIBCXX,查看输出的最高版本号是否低于3.4.25。
  2. 替换交叉编译sysroot的libstdc++文件:
    将树莓派/usr/lib/arm-linux-gnueabihf/目录下的libstdc++.so.6和libstdc++.a拷贝到主机交叉编译环境的对应路径../../Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/usr/lib/arm-linux-gnueabihf/,覆盖原有高版本文件。
  3. 调整.pro编译配置(上述操作无效时使用):
    • 可添加宏定义强制关闭getentropy相关实现,在.pro中插入:
    QMAKE_CXXFLAGS += -D_GLIBCXX_USE_GETENTROPY=0
    
    • 若你的树莓派系统版本较旧(如Debian Stretch,对应GCC 6),不支持C++17的全部特性,可将.pro中的CONFIG += c++17改为更低版本:
    CONFIG += c++14
    
    • 也可添加静态链接libstdc++的配置,避免运行时动态链接出错:
    QMAKE_LFLAGS += -static-libstdc++
    
  4. 清理项目后重新编译:
    依次执行Qt Creator的「清理项目」-「运行qmake」-「重新构建」,验证报错是否消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:00