【问题标题】:Point cloud library not working on Visual Studio 2019点云库不适用于 Visual Studio 2019
【发布时间】:2020-11-25 17:02:16
【问题描述】:

我已经用 vcpkg 安装了点云库。我使用命令行“vcpkg install pcl:x64-windows”并将所有其他库与 PCL 一起安装。之后,我使用“.\vcpkg\vcpkg 集成安装”让所有库直接在我的 Visual Studio 2019 项目中运行。事实上,我的项目(包含 https://pcl.readthedocs.io/projects/tutorials/en/latest/writing_pcd.html#writing-pcd 的示例演示代码)在命令之后正确包含了两个头文件并且没有显示任何问题。 然而,在运行代码之后,我得到了一堆与 boost 库相关的错误,例如:

Error   C2116   'boost::interprocess::winapi::GetFileSizeEx': function parameter lists do not match between declarations    RegistrationAlgorithm   C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\fileapi.h    

Error   C2733   'CreateSemaphoreA': you cannot overload a function with 'C' linkage RegistrationAlgorithm   C:\vcpkg\vcpkg\installed\x64-windows\include\boost\interprocess\detail\win32_api.hpp

Error   C4996   '_open': This function or variable may be unsafe. Consider using _sopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    RegistrationAlgorithm   C:\vcpkg\vcpkg\installed\x64-windows\include\pcl\io\low_level_io.h          

这里提出了相同的问题(相同的示例代码,相同的错误):point cloud library not working in VS 2019 but does work in VS 2017

但是,他设法通过从 VS2019 构建工具 (v142) 切换到 Visual Studio 2017 构建工具 (v141) 使其正常工作。我下载了 v141 并切换了,但仍然遇到相同的错误。

有什么建议吗?

我尝试让代码通过 CMake 运行,但在这个过程中我遇到了更多错误。

【问题讨论】:

  • 有什么建议吗?您可能想在 vcpkg github 页面上发布错误报告

标签: c++ visual-studio point-cloud-library boost-interprocess vcpkg


【解决方案1】:

C3861 的解决方案:

你可以移动“typedef unsigned long long pop_t;”在#if 和#else 之外,这样任何一个都将使用该参数进行数学运算。如果 FLANN 安装在 Program Files 或 Program Files (x86) 中,则需要以管理员身份运行 Visual Studio。程序文件和程序文件 (x86) 受到保护,需要提升权限才能编辑任何目录的内容。

另外,您可以参考link 了解更多信息。

【讨论】:

  • 谢谢。现在它正在工作。在我的情况下,必须将行移到 #if 和 #else 之外。
  • 很高兴您得到了解决方案,感谢您的分享,如果您能将其标记为答案,我将不胜感激,这将对其他社区有所帮助。
  • 不幸的是,我没有足够的声誉将两个答案都标记为答案。
  • 如果你能选择一个合适的答案来标记,我将不胜感激,因为它可以帮助别人。
  • 我明白,我的意思是我不能标记这两者,因为它告诉我我没有足够的声望点来标记答案。其他人也必须投票,并且在达到阈值后会被标记,否则我肯定会这样做。
【解决方案2】:

这是 boost 进程间和 MSVC 2019 之间的兼容性问题。 根据Microsoft,您可以在MSVC 2019 中使用not-yet-documented 兼容性开关来防止与重新声明外部“C”函数相关的C2116C2733 错误。这个选项是/Zc:externC-

这会留下一些与使用不安全 CRT 功能有关的 C4996 错误。 根据错误消息,可以通过在包含头文件之前写入 #define _CRT_SECURE_NO_WARNINGS 来抑制这些。

有了这两个,示例代码在这里构建得很好。


编辑:要添加该选项,请遵循此菜单/对话路线 -

  • Project / Properties / C/C++ / Command Line,然后在底部的 Additional Options 文本框中键入该选项

【讨论】:

  • 感谢您的及时答复。感谢您,我设法消除了 C4996 错误,但作为 Visual Studio 的新手,我不知道如何“激活”该开关。能否请您详细说明一下?
  • 非常感谢。经过两天的挣扎,解决方案似乎很接近。我刚刚注意到还有一个错误,这是唯一剩下的一个错误,即:Error C3861 'pop_t': identifier not found RegistrationAlgorithm C:\vcpkg\vcpkg\installed\x64-windows\include\flann\algorithms\dist.h 如果你碰巧知道如何解决这个问题,那就太好了。谢谢!
  • 对不起,我没有在这里得到那个错误。我似乎与 flann 包有关,而不是提升进程间,所以这是一个不同的问题。也许问一个新问题?
  • 希望 /Zc:externC- 在未来的 Boost 版本中不再需要(即将发布的 Boost 1.74)。相关的 Boost.Interprocess 错误报告是 Issue 99
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2020-12-03
  • 2013-05-07
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多