建议在调整include顺序、修改pcl和opencv代码之前先尝试本方法
报错现象
如https://blog.csdn.net/qq_60609496/article/details/123557556所示
未定义标识符 "flann_algorithm_t"
解决方法:检查include目录设置里是否有类似"include/opecv2"的写法
假设在windows上(通过cmake
编译和安装),一个正常的opencv结构为:
/path/opencv/
│
├─── include/
│ ├── opencv2/
│ │ ├── core/
│ │ │ ├── core.hpp
│ │ │ └── ...
│ │ ├── imgproc/
│ │ │ ├── imgproc.hpp
│ │ │ └── ...
│ │ ├── highgui/
│ │ │ ├── highgui.hpp
│ │ │ └── ...
│ │ └── ...
│ └── opencv.hpp
│
├─── x64/
│ └── vc17/
│ ├── lib/
│ │ ├── opencv_world470.lib
│ │ └── ...
│ └── bin/
│ ├── opencv_world470.dll
│ └── ...
└─── ...
其他方式获得的opencv目录结构应该大同小异。我们只关注include
在自己的工程中,检查opencv的include目录设置,应指定为/path/opencv/include
,这是标准写法。而出错的写法可能是/path/opencv/include/opencv2
,这是不规范写法,会导致预处理器找到include/opencv2/flann
里的头文件。
在修正后能直接解决该问题。
补充
如果是cmake工程,应直接通过find_package
找到opencv和pcl,然后通过target_link_libraries
直接链接即可,不需要手动指定include目录
可以看看vcpkg的usage,简单直接:
find_package(PCL CONFIG REQUIRED)
target_link_libraries(main PRIVATE ${PCL_LIBRARIES})