【发布时间】:2018-11-29 23:21:54
【问题描述】:
我正在尝试在 Visual Studio 2017 中从 https://github.com/PointCloudLibrary/pcl/releases 设置 PCL 1.8.1 库。
在我的包含目录中,我有:
C:\Program Files (x86)\OpenNI2\Include
C:\Program Files (x86)\PCL 1.8.1\3rdParty\VTK\include\vtk-8.0
C:\Program Files (x86)\PCL 1.9.1\3rdParty\Qhull\include
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\include
C:\Program Files (x86)\PCL 1.8.1\3rdParty\Eigen\eigen3
C:\Program Files (x86)\PCL 1.8.1\3rdParty\Boost\include\boost-1_64
C:\Program Files (x86)\PCL 1.8.1\include\pcl-1.8
图书馆目录:
C:\Program Files (x86)\PCL 1.8.1\3rdParty\VTK\lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\Qhull\lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\Boost\lib
C:\Program Files (x86)\PCL 1.8.1\lib
C:\Program Files (x86)\OpenNI2\Lib
我认为这一切都是正确的。我能够构建和运行像http://pointclouds.org/documentation/tutorials/writing_pcd.php#writing-pcd 这样的简单示例。我的主要需要是使用 Fdtrees 和 Octrees,但是当我尝试编译这个示例 http://pointclouds.org/documentation/tutorials/kdtree_search.php#kdtree-search 时,我得到了 LNK2019 错误: LNK2019 errors screenshot
如您所见,这一切都与 FLANN 库有关。我发现即使我从包含库中删除 C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib ,也会发生相同的错误。我没有正确包含库吗?
还有这篇文章:Setting up Point Cloud Library with Visual Studio 提到在链接器/输入/附加依赖项中添加 .libs。我也试过这样做:
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib\flann.lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib\flann_cpp.lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib\flann_cpp_s.lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib\flann_cpp_s-gd.lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib\flann_cpp-gd.lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib\flann_s.lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib\flann_s-gd.lib
C:\Program Files (x86)\PCL 1.8.1\3rdParty\FLANN\lib\flann-gd.lib
也没有完整的路径,但仍然没有成功......
我真的在努力完成这项工作,并且还了解在 Visual Studio / C++ 中包含外部内容的整个过程。我对此很陌生,这绝对是一个比 Python 的“pip install xyz,import xyz”更复杂的过程......我讨厌某些东西对我来说是一个黑匣子,并且真的很想解决这个问题。
对不起,如果这篇文章太长,但我想提供每一个细节。谢谢你的任何回答。
【问题讨论】:
-
您可以从“输出”选项卡中复制并粘贴错误消息的文本。这比错误列表格式更好。
-
您添加了不必要的库。另外我怀疑你必须在调试和发布之间有不同的库。并确保二进制文件是使用您的编译器或 VS2015 构建的。来自任何其他编译器(包括旧版本的 Visual Studio)的二进制文件将不兼容。
-
您好,谢谢。非常感谢您的回答!二进制文件是指 .lib 或 .dll 文件?因为在主 PCL 库文件夹和 3rd 方库中的“bin”文件夹中也有一些 .dll。我不确定如何处理这些(我现在根本没有使用它们)
-
我的意思是
.lib。我不相信flann_cpp.lib和flann_cpp_s.lib或flann_cpp-gd.lib应该同时使用。 _s 和 _gd 用于不同的 CRT。 -
_s = 静态发布库 _s_gd = 静态调试库。没有 _s 意味着使用 dll。 _gd 表示调试。
标签: c++ visual-studio include linker-errors point-cloud-library