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

jpa*_*ich 0 pdf visual-studio visual-c++

尽管我做了与其他所有库相同的例程,但我在链接库时遇到了严重的问题.该库是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)
Run Code Online (Sandbox Code Playgroud)

但是,如果我执行以下操作,我会看到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
Run Code Online (Sandbox Code Playgroud)

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

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

mjv*_*mjv 8

你似乎错过了Fitz库.这是MuPDF项目的一部分,但它构建为单独的LIB文件.

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

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

extern "C" {
   #include "fitz.h"   //  or whatever other include file which in turn includes fitz.h
}
Run Code Online (Sandbox Code Playgroud)

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