1

我正在尝试使用 MS Visual Studio 2010 和 Info-ZIP 解压缩库来构建我的项目。当我UzpVersion()在代码中插入调用时,链接器失败说:

错误 LNK2019:未解析的外部符号 _UzpVersion 在函数 _wmain 中引用

DUMPBIN 显示库导出_UzpVersion@0(它是用相同的编译器编译的)。但目标文件要求_UzpVersion. 该函数声明为:

extern "C" {

const UzpVer * UzpVersion(void);

}

它有什么问题?如何解决?抱歉,我不精通 Visual C++;我大部分时间都在使用 GNU C++。

4

2 回答 2

0

这是一个链接错误。编译器会看到 UzpVersion 的声明,否则编译失败。您需要确保已将项目配置为包含 .lib。

在此处输入图像描述

编辑:另外,你说你自己编译它。确保将源代码编译为 C 而不是 C++。

于 2013-08-04T08:50:46.243 回答
0

Figured it out by myself.

The library is compiled with __stdcall calling convention, but does not declare exported functions as such. Visual Studio 2010 by default compiles a project with /Gd flag, that switches to __cdecl calling convention. Besides other, these calling conventions are also using different name mangling schemes for C functions.

You can read details on MSDN.

For Info-ZIP library in particular, the issue is fixed by adding the following defines before including the unzip.h header:

#define EXPENTRY __stdcall
#define USE_UNZIP_LIB
于 2013-08-04T11:55:48.723 回答