Visual studio 尽管在dumpbin.exe中报告,但仍存在链接函数的问题

Visual studio 尽管在dumpbin.exe中报告,但仍存在链接函数的问题,visual-studio,visual-c++,pdf,Visual Studio,Visual C++,Pdf,我在链接一个库时遇到了严重的问题,尽管我和所有其他库做了同样的例行工作。该库为libmupdf.lib,是一个pdf查看库 无论如何,我已经编译了.lib并将其作为附加依赖项添加到链接器中,添加了头include作为附加include,并指定了VSC++应该在何处查找库。它不会抱怨链接开始时找不到libmupdf.lib 然后我得到标准外观的链接器错误: error LNK2019: unresolved external symbol "int __cdecl fz_strlcat(char

我在链接一个库时遇到了严重的问题,尽管我和所有其他库做了同样的例行工作。该库为libmupdf.lib,是一个pdf查看库

无论如何,我已经编译了.lib并将其作为附加依赖项添加到链接器中,添加了头include作为附加include,并指定了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,并在标题中进行了更改,但仍然没有链接


在这一点上,任何线索或帮助都将不胜感激。谢谢

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

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

现在。。。在更详细地查看错误消息时,这看起来像是C vs C++链接问题。在FZY-STLCAT函数从C++调用时,我是否错了,FITZ.H可能没有被包含在外部C{}链接中吗? 在这种情况下,C++会产生链接fZyStruc@ @的名称。YAHPADPBDH@Z,其中包括函数参数类型的完整签名代码等。。 加入

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

关于libmupdf库中与函数和变量相关的include,LNK错误应该会消失。

我似乎能够从源代码构建的唯一lib是libmupdf.lib和libthirdparty.lib。我看不到任何菲茨特有的图书馆。我也可以用LBMUPDF和LangDeDePobe来构建源代码中包含的MUPDF.EXE,就我所见,您的权利,它是从C++调用的,所以我把这些包括起来。Exchange C {包含包括PDFAPP.H},但是错误更改为->错误LNK2019:未解决的外部符号fZY-StLCAT,引用了函数VielRoRead 32.6上的C++ FAQ…包装包裹应该足够了吗?我不应该用extern C在标题中预先编写所有原型,是吗?@jparanich:不,你不需要这样做;最好是让开源文件是这样的,这样你就可以在他们修复的时候继续轻松地与存储库一起进化。唯一的理由是避免在你的C++源文件的级别添加链接指令。@ JPARANICH:看起来你使用了MUPDF源的一些应用程序代码;这就是winerror被定义和引用的地方,等等。显然,其中的代码没有使用extern C链接,您可能需要将它添加到那里。换句话说,问题不在于libmupdf.lib本身,而在于你用来让库为你自己的应用程序做事情的应用程序片段/文件。