我在 64 位版本的 Windows 上使用 64 位版本的 Visual Studio 2008。我有一个链接到库(OpenCV 2.1)的项目。我使用相同的编译器从源代码编译了 OpenCV。我的问题发生在发布和调试模式下。
在“属性”窗格或我的项目中,我在 C/C++ ->“其他包含目录”下添加了包含头文件的目录。我已将包含 .lib 文件的目录添加到“附加库目录”中,并且已将库的名称添加到链接器 -> 输入下的“附加依赖项”条目中。
当我编译和链接时,我得到这种风格的错误:错误 LNK2019: unresolved external symbol _cvFloodFill referenced in function "int __cdecl Label(class cvImage &)" (?Label@@YAHAAV?$cvImage@M@@@Z)
在 Linker->Command Line -> Additional options 下,我添加了标签:/verbose:lib,我在编译器输出窗口中看到它正在搜索并查找应该包含函数的库 (cv210d.lib)。(我查看了 OpenCV 的源代码,发现有问题的函数是在这个库中定义的)
1>链接...
1>搜索库
1> 搜索 C:\Program Files\OpenCV2.1\lib\cv210d.lib:
在 OpenCV 源代码中,它具有 extern "C" 声明,其中包含相关函数的声明。
我在库文件上运行了 dumpbin /all,我看到定义了以下符号。(我已经安装了 Windows 的 gnu 工具链,所以我可以使用 grep)。
C:\Program Files\OpenCV2.1\lib>dumpbin /all cv210d.lib | grep cvFloodFill
732B4 __imp_cvFloodFill
732B4 cvFloodFill
1CA __imp_cvFloodFill
1CA cvFloodFill
因此,如您所见,链接器正在寻找符号 _cvFloodFill,但未定义。只定义了 cvFloodFill 和 __imp_cvFloodFill ,所以看起来发生了一些有趣的事情,当我编译库与尝试链接它时,名称修改不同。
所以这就是我卡住的地方。我是否正确解释了这些信息?我需要做些什么来影响名称修改吗?我是否需要使用某种不同的标志来编译库?