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

使用gRPC与OpenCV编译C++代码时遇GLIBCXX版本依赖链接错误求助

解决gRPC+OpenCV CMake构建时的GLIBCXX版本链接错误

问题详情

  • 项目环境:C++项目,集成gRPC与OpenCV,通过CMake+Make构建,已手动指定所需库及.so文件路径
  • 构建命令:
cmake -DCMAKE_PREFIX_PATH=$MY_INSTALL_DIR ../..
make -j 4
  • 触发的链接错误:
/usr/bin/ld: /usr/local/lib/libopencv_core.so: 
  undefined reference to `std::condition_variable::wait(std::unique_lock<std::mutex>&)@GLIBCXX_3.4.30'
  • 附加现象:仅使用OpenCV的代码直接用g++编译可正常运行,但代码中包含cv::Mat时就会触发上述错误;已尝试在CMakeLists.txt中添加各类依赖库、配置环境变量路径,问题仍未解决。

解决方案

1. 检查GCC与GLIBCXX版本兼容性

std::condition_variable::wait的GLIBCXX_3.4.30符号是GCC 10.x及以上版本才提供的,错误本质是当前构建环境使用的libstdc++.so版本不包含该符号:

  • 检查当前g++版本:
    g++ --version
    
    若版本低于10,需升级GCC到10或更高版本。
  • 验证系统libstdc++.so是否包含目标版本符号:
    strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.30
    
    若无输出,说明需要更新libstdc++库(可通过升级GCC同步更新)。

2. 强制CMake使用指定GCC版本

若系统存在多版本GCC,CMake可能默认选用了旧版本,需手动指定:

  • 在CMakeLists.txt开头添加:
    set(CMAKE_C_COMPILER /usr/bin/gcc-10)
    set(CMAKE_CXX_COMPILER /usr/bin/g++-10)
    
    (路径根据实际安装的GCC版本调整)
  • 或在cmake命令行直接指定:
    cmake -DCMAKE_C_COMPILER=gcc-10 -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_PREFIX_PATH=$MY_INSTALL_DIR ../..
    

3. 对齐OpenCV与项目的编译环境

你的OpenCV可能是用高版本GCC编译的,但当前项目构建用的是低版本GCC,导致链接时依赖版本不兼容:

  • 重新使用当前项目指定的GCC版本编译OpenCV,确保两者依赖的libstdc++版本一致。

4. 显式指定libstdc++链接路径

若系统已安装高版本libstdc++但未被优先加载,可在构建时指定路径:

  • 在CMakeLists.txt中添加:
    link_directories(/usr/lib/gcc/x86_64-linux-gnu/10)
    
    (路径根据实际GCC版本的库路径调整)
  • 或在make时临时指定环境变量:
    LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/10 make -j4
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:46:14