OpenCV与PCL发生冲突?

时间:2012-09-18 16:31:23

标签: c++ visual-studio-2010 opencv point-cloud-library

我正在使用OpenCV 2.4.2和Point Cloud Library 1.6.0。

我的程序工作正常,直到我添加行...

#include <pcl/segmentation/segment_differences.h>

当我尝试编译时会导致错误。我明白了......

Error   93  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  424
Error   94  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  425
Error   95  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  427
Error   96  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  514
Error   97  error C2872: 'flann' : ambiguous symbol C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl\kdtree\kdtree_flann.h  520

C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol
              could be 'flann'
              or       'cv::flann'

所以看起来OpenCV附带的Flann文件与PCL中的Flann文件发生冲突。

有什么建议吗?

修改

这里有一个类似的问题 PCL, OpenCV and flann conflict 但这是一个略有不同的错误...

编辑2

所以在我之前的main.cpp文件中

使用命名空间pcl; 使用命名空间cv;

我评论了这两个并更新了程序以使用cv :: Mat等

但是当我添加...时,我仍然在编译时遇到错误。

#include <pcl/segmentation/segment_differences.h>

C:\Program Files (x86)\PCL 1.6.0\include\pcl-1.6\pcl/kdtree/kdtree_flann.h(520): error C2872: 'flann' : ambiguous symbol 
          could be 'flann' 
          or       'cv::flann'

我刚尝试将include \ opencv2 \ flann \重命名为include \ opencv2 \ flanncv \并将一堆opencv标头中的includes更新到这个新的flanncv目录。我仍然遇到上述错误...

3 个答案:

答案 0 :(得分:4)

因此,无需重建内容即可修复此问题,即为其添加空命名空间

更改实例 FLANN ::东西 至 :: FLANN ::东西

我认为它有效地告诉它使用全局命名空间而不是cv命名空间。

答案 1 :(得分:0)

嗯,我在linux下使用pcl和openCv,但这里是

问题是两个库都包含头文件flann / flann.hpp或类似的东西,其中定义了名称空间flann。

现在我不知道你的机器上是如何安装这些库的,但我会假设你使用的是pcl和openCv的无法安装版本,因此每个库都带有自己的flann库。

通常在两个库的CMakeLists中都有一行来搜索flann库,例如:INCLUDE_LIBRARY($(flann)REQUIRED)

解决方案可能是删除两个已安装的库pcl和openCv。然后从他们的网站下载并安装flann。然后下载openCv和pcl的每晚构建,编译它们,它们应该能够找到相同的flann实例,因此问题可能会得到解决

修改 还有一个想法,也许问题只是因为你在代码中使用了这个问题:

using namespace pcl;
using namespace cv;

所以你有两个不同的实例来自flann名称空间。删除“using namespace”并在代码中使用pcl :: thepclclass,cv :: theopencvclass,看看是否有帮助

祝你好运

答案 2 :(得分:0)

解决方案只是在flann之前添加双重冒号(::) 一切都会好起来的。

例如,它是:

flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);

成为:

::flann::Matrix<ElementType>(new ElementType[size_*dim_], size_, dim_);