gpt4 book ai didi

c++ - 将 Rob Hess 的 SIFT 库(在 C 中,使用 OpenCV)与 C++ 链接起来

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:16 24 4
gpt4 key购买 nike

我正在尝试使用 Rob Hess's SIFT library在我的 C++ 项目中。我浏览了其他 SIFT 实现(的代码),但这个似乎最像 Lowe 的原始论文中的阶段划分,并且还使用了我熟悉的 OpenCV,所以我选择了这个。

不幸的是,自从我尝试在 C++ 中使用它后,我遇到了麻烦。该库最初是用 C 语言和 OpenCV 编写的。

我曾尝试在使用和不使用 extern 包围 C 库 include-s 的情况下编译我的代码,但都不起作用。我想我已经诊断出这两种情况下的问题所在,但我不知道如何解决它们,非常感谢任何帮助。

问题(或者至少,我认为问题是什么):

  • withouth extern:由于 C++ 名称重整而不起作用(我已经检查过,当然所有函数名称都经过修饰)

  • with extern :不起作用,因为 OpenCV 可以检测它为 C 或 C++ 编译的天气。任何 SIFT 库函数都没有链接问题,但现在 OpenCV 包含 C++ header ,并且由于在主程序中它最终包含在 extern block 中,所以我得到(字面意义上的)错误,如这些:

    /usr/local/include/opencv2/core/mat.hpp:2361: 错误:带有 C 链接的模板

在过去的几天里,我一直在努力使这项工作正常进行,因此,如果有人尝试在 C++ 中使用相同的 SIFT 库,或者在使用不同的库时遇到过类似问题,将不胜感激。

最佳答案

看来我已经设法找到了一个很好的解决方案。两种方式,简单而优雅:

简单:

只需在包含所有 SIFT 库 header 的 extern "C" 部分之前包括库中使用的所有 OpenCV header (以及任何其他需要的 OpenCV header )。

优雅

在所有库头文件中,在 OpenCV 包含的所有代码except 周围添加 extern "C" 部分,如下所示:

// OpenCV includes:
#include "cxcore.h"
#include ....

#if __cplusplus
extern "C" {
#endif

...
function definitions in the header file
...

#if __cplusplus
}
#endif

现在,所有库包含都可以直接在 C++ 代码中#included,而无需 extern "C"。 OpenCV 库可针对 C/C++ 正确编译(取决于编译器),并且其他 OpenCV 包含和 SIFT 库包含的相对顺序无关紧要。

关于c++ - 将 Rob Hess 的 SIFT 库(在 C 中,使用 OpenCV)与 C++ 链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8644626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com