[第三方] VTK 9.4 公开了 nlohmann::json,导致 ODR 发生冲突
作者: FrBrenno创建于 2025年10月7日更新于 2025年10月9日
标签kind: bug
描述错误
使用与 VTK 9.4 连接的 PCL 时, VTK 中内置的 nlohmann::json(在 vtk_nlohmannjson.h 中重命名为 vtknlohmann) 会被公开暴露。这会导致冲突,如果项目同时使用单独的 nlohmann::json 配置,编译器就会为使用项目自己的 nlohmann::json 的任何函数生成一致定义规则(ODR) 相关冲突。此外,编译器不理解 nlohmann::json 并迫使我使用 vtknlohmann::json,这是内置的 VTK json。
背景
我正在尝试将 PCL 添加到我的项目中以进行点云可视化,并遇到了此问题。PCL 安装本身运行良好(除了"PATH 太长无法更改"的警告之外,我手动解决了此问题)。
我使用 Windows 11 和 Visual Studio 2022。
要重现
- 使用 CMake 为项目安装、配置和链接 nlohmann::json(我使用了 FetchContent)。
- 安装 PCL(最新版本),并使用 CMake 将其链接到项目中。
- 编写使用自定义 nlohmann::json 的函数。
- 编写使用 VTK 的函数(错误出现在我尝试可视化点云时)。
屏幕截图/代码片段
显示冲突的屏幕截图:
内容来源: PointCloudLibrary/pcl