PCL “libvtkCommonCore-9.1.so.9.1.0: undefined reference to...@GLIBCXX_3.4.30”

1.问题描述:

完成 PCL、VTK 搭建后(https://mp.csdn.net/mp_blog/creation/editor/139858438),笔者运行PCL项目程序中,遇到下面错误: 


[build] /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libvtkCommonCore-9.1.so.9.1.0: undefined reference to `std::condition_variable::wait(std::unique_lock<std::mutex>&)@GLIBCXX_3.4.30'

[build] collect2: error: ld returned 1 exit status

2.问题分析:

这个错误信息表明链接器(ld)在尝试链接 libpcl_io.so 库时遇到了问题。具体来说,它找不到 std::condition_variable::wait(std::unique_lock<std::mutex>&) 函数的定义,这是 C++ 标准库中的一部分,属于 libstdc++

错误中的 @GLIBCXX_3.4.30 表示这个符号是在 libstdc++ 的版本 3.4.30 中定义的。这通常意味着你的系统中安装的 libstdc++ 版本低于所需的版本。

std::condition_variable::wait 是 C++11 中引入的,所以如果您的系统上的 GCC 版本低于 4.8(C++11 支持的最低版本),或者即使版本高于 4.8 但是使用的是旧的 GLIBCXX,那么可能会出现这个问题。

3.解决:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

参考文章:

undefined reference to ... @GLIBCXX_3.4.22_undefined reference to glibcxx-CSDN博客

### 解决 PCL 1.12.1 中 `libpcl_filters.so` 链接器错误的原因分析 在处理 Point Cloud Library (PCL) 版本 1.12.1 的编译过程中,如果遇到链接器错误提示 `undefined reference to pcl::SampleConsensusModelPerpendicularPlane`,这通常表明存在以下几种可能的问题: #### 1. 编译选项不一致 当使用 Microsoft Visual Studio 或其他支持 MSVC 的工具链时,可能会因为调试模式和发布模式之间的运行库设置冲突而引发类似的错误。具体来说,在某些情况下,未定义 `_DEBUG` 宏却启用了 `/RTC`(运行时检查)选项会触发构建配置中的兼容性警告并最终导致链接失败[^1]。 为了修复此问题,可以按照如下方法调整项目属性: - **切换到 Debug 运行时**: 转至项目的“代码生成”选项卡,并选择适合当前工作负载的调试版本动态/静态多线程 CRT 库。 ```cpp // 示例:通过预处理器指令强制启用 _DEBUG 符号 #define _DEBUG ``` #### 2. 动态链接库缺失依赖项 另一个常见原因是目标文件未能正确链接所需的共享对象模块。对于 Linux 平台上的 GCC/G++ 用户而言,确保安装完整的开发包集合至关重要;特别是那些提供额外功能扩展的支持组件如 VTK、FLANN 和 Eigen 等。 验证是否存在遗漏的关键头文件路径以及对应的 `.so` 文件非常重要。可以通过命令行工具确认这些资源的位置及其状态: ```bash ldd /path/to/libpcl_filters.so | grep "not found" find /usr/local/lib -name "*sample_consensus*" ``` 假如发现缺少特定子系统的实现,则需重新执行 cmake 构建流程来激活相应的插件开关参数。例如: ```cmake option(PCL_BUILD_WITH_FLANN "Build with FLANN support." ON) add_subdirectory(${PROJECT_SOURCE_DIR}/modules/sample_consensus) target_link_libraries(pcl_filters PRIVATE sample_consensus) ``` #### 3. API 更改或废弃函数调用 最后还需注意的是,随着开源软件迭代更新频繁发生接口变更甚至移除操作的情况也不少见。因此建议仔细查阅官方文档说明或者提交 issue 请求帮助排查潜在差异之处。 综上所述,上述三种情形均可能导致所描述的现象出现。针对具体情况采取适当措施即可有效缓解此类难题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值