在Visual C ++中使用win32 .lib和x64项目

时间:2015-03-31 18:30:43

标签: c++ opencv visual-studio-2012 lnk2019

我有一个C ++库(已下载here)。在库中,有一些“.h”头文件,“。cc”文件包含代码和两个静态“.lib”,它们包含在“win32”文件夹中。我在Visual Studio 2012 C ++中只完成了一个x64项目。

为了使用该库,我在属性页的“Additional Include Directories”中指定了.h文件的路径。在“其他库目录”中,我指定了包含“.lib”文件的文件夹的路径。在“附加依赖项”中,我将所有“.lib”文件的名称放在“附加库目录”中。在“调试”模式下,我使用库的调试版本(如果可用)。

在代码中,我添加一个#include< brisk.h>表示我想使用该库。我也使用其他库,但它们不会导致错误。

现在,我有一个

"LNK2019 unresolved external symbol "public: __cdecl cv:: ...etc" 
编译时出现

错误。我想知道这个是否是由某些“.lib”可能在win32而不是x64中编译的事实引起的。这可能是错误吗?

如果很明显我做错了什么,请给我小费。我咨询了this question,但我不太确定......

修改:

以下是编译器的输出:

1>------ Build started: Project: BRISK_opencv2, Configuration: Debug x64 ------
1>  BRISK_opencv2.cpp
1>BRISK_opencv2.obj : error LNK2019: unresolved external symbol "public: __cdecl cv::BriskDescriptorExtractor::BriskDescriptorExtractor(bool,bool,float)" (??0BriskDescriptorExtractor@cv@@QEAA@_N0M@Z) referenced in function main
1>BRISK_opencv2.obj : error LNK2019: unresolved external symbol "public: __cdecl cv::BriskFeatureDetector::BriskFeatureDetector(int,int)" (??0BriskFeatureDetector@cv@@QEAA@HH@Z) referenced in function main
1>C:\...\x64\Debug\BRISK_opencv2.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

2 个答案:

答案 0 :(得分:1)

您不能在同一进程中使用32位和64位代码。

链接器应该告诉您它是否正在跳过您指示它使用的输入文件,因为架构不兼容。读取所有链接器输出,而不仅仅是错误。

答案 1 :(得分:1)

使用

dumpbin win32.lib /headers

从机器开始的行将告诉您它所期望的架构

在FILE HEADER VALUES结束时,在OPTIONAL HEADER VALUES之前,它会告诉你它是否需要32位或64位。

可能是lib是64位而是IA64而不是X64。那仍然是不相容的。