C++ OSX上的openCV和libtiff libs不兼容

C++ OSX上的openCV和libtiff libs不兼容,c++,macos,opencv,homebrew,libtiff,C++,Macos,Opencv,Homebrew,Libtiff,我正在使用一个金字塔形tiff文件。但是,OpenCV不支持聚合tiff文件,因此我尝试使用libtiff 4.0.3提取我需要的层/目录/分辨率,然后将其传递给OpenCV进行处理 我包括以下内容: #include "tiffio.h" #include "opencv2/highgui/highgui.hpp" 但这样做会让我在types_c.h中看到以下内容: typedef int64_t int64; Typedef redefinition with different type

我正在使用一个金字塔形tiff文件。但是,
OpenCV
不支持聚合tiff文件,因此我尝试使用
libtiff 4.0.3
提取我需要的层/目录/分辨率,然后将其传递给
OpenCV
进行处理

我包括以下内容:

#include "tiffio.h"
#include "opencv2/highgui/highgui.hpp"
但这样做会让我在
types_c.h
中看到以下内容:

typedef int64_t int64;
Typedef redefinition with different types ('int64_t(aka 'long long') vs 'long')
这两个库对int64\t的定义似乎有所不同

我使用了
homebrew
来安装这两个库,因此我不想编辑这些库,因为这会导致更新问题,对我团队中的未来开发人员来说是一种痛苦,等等

有没有一种方法可以在不修改它们的情况下使用这两个库?

因为这两个库都使用定义“polute”全局名称空间(您可以看到,在第三方库中使用适当的名称空间是多么重要),所以无法将这两个库都包含到全局名称空间中。您已将其中一个封装在用户定义的命名空间中,如下所示:

namespace libtiff {
    #include "tiffio.h"
}
#include "opencv2/highgui/highgui.hpp"

这将解决编译问题,尽管我不确定此解决方案是否方便使用,因为您必须使用libtif::prefix来使用libtiff成员,

我不知道您可以这样使用名称空间包含,这正是我想要的。libtif::prefix不是很好,但它比其他选择要好得多,而且价格很低。谢谢我认为您可以使用名称空间libtiff放置
在include之后,并且没有任何冲突,除非在任何后续代码中使用
int64
类型。