尽管在dumpbin.exe中报告了链接函数的问题

时间:2011-04-19 17:59:46

标签: visual-studio visual-c++ pdf

尽管做了与其他所有库相同的例程,我仍然遇到严重的问题链接库。该库是libmupdf.lib(pdf查看库)。

无论如何,我编译了.lib并将其添加为链接器中的“附加依赖项”,添加了包含作为附加包含的头,并指定了VSC ++应该查找库的位置。它没有抱怨因为链接开始没有找到libmupdf.lib。

然后我得到标准的链接器错误:

error LNK2019: unresolved external symbol "int __cdecl fz_strlcat(char *,char const *,int)" (?fz_strlcat@@YAHPADPBDH@Z) referenced in function "void __cdecl winerror(struct pdfapp_s *,int)" (?winerror@@YAXPAUpdfapp_s@@H@Z)

但是,如果我执行以下操作,我会看到fz_strlcat确实在libmupdf.lib中,但前面带有_ ....这是正常的吗?

C:\Program Files\Microsoft Visual Studio 10.0\VC>dumpbin /SYMBOLS "libmupdf.lib" | "grep.exe" fz_strlcat
033 00000000 SECTC  notype ()    External     | _fz_strlcat
060 00000000 UNDEF  notype ()    External     | _fz_strlcat
381 00000000 UNDEF  notype ()    External     | _fz_strlcat

注意:我尝试将对fz_strlcat的调用更改为_fz_strlcat并在标题中进行了更改,但仍然没有链接。

此时有任何线索或帮助。谢谢!

1 个答案:

答案 0 :(得分:8)

你似乎错过了Fitz图书馆。这是MuPDF项目的一部分,但它构建为一个单独的LIB文件。

修改
我更正了:在查看MuPDF的GIT存储库中的vcproj文件时,似乎libmupdf.lib构建为一个大型库,包含所有Fitz内容以及本身甚至第三方库。

现在......在查看错误消息的详细信息时,这看起来像是C与C ++的链接问题。看到从C ++调用fz_strlcat函数我是错误的,因为fitz.h可能没有包含在extern "C" {}链接中吗?
在这种情况下发生的是C ++为链接(fz_strlcat@@YAHPADPBDH@Z)生成一个受损的名称,其中包含函数完整签名的代码(参数类型等)。
添加

extern "C" {
   #include "fitz.h"   //  or whatever other include file which in turn includes fitz.h
}

围绕与libmupdf库中的函数和变量有关的包含,LNK错误应该消失。