尽管做了与其他所有库相同的例程,我仍然遇到严重的问题链接库。该库是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并在标题中进行了更改,但仍然没有链接。
此时有任何线索或帮助。谢谢!
答案 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错误应该消失。