2017-05-31 98 views
0

我试过多个PDF lybrary,MUPDF是我最后一次创建自己的小型PDF应用程序的机会。但在这里我也有问题。在此之前,我遇到了LNK4098的问题:defaultlib'MSVCRT',但我解决了为所有MUPDF库/ MDd版本设置的问题。大多数错误是以后解决,但我仍然无法解决这个问题:用C++编译C库。链接问题。 MuPDF

error LNK2001: unresolved external symbol "void __cdecl pdfapp_open(struct pdfapp_s *,char *,int)" ([email protected]@[email protected]@[email protected]) 
//more 3 errors 

书面基于C MuPDF,我这样做:

extern "C" { 
#include <pdfapp.h> 
#include <mupdf\fitz\context.h> 
} 

但我得到这个错误:

error LNK2001: unresolved external symbol pdfapp_open 
//more 3 errors 

我的应用程序中只有三种功能。我检查了库和头文件链接,我也设置了我的项目Debug,x64,/ MDd,但是我得到了相同的结果。老实说,我无法在任何一个库中找到这三个功能。我不是编程方面的专家,但我知道函数字符串应该在库中找到,不是吗?这个错误在我的情况下意味着什么?

+3

C和C++是不同的语言。他们有一个足够大的公共子集来编写程序,但没有专门编写和维护以符合这两个标准的程序很可能在一种语言或另一种语言中无效。如果你有一个C库,然后用C编译器构建它。 MSVC++在C模式下运行时不是一个符合要求的C编译器,而且它在* C++模式下运行时肯定不是一个符合要求的C编译器。它的C模式可能足以构建特定的C代码,但是,特别是如果它是旧代码。 –

+0

@ John Bollinger我认为extern C必须解决C和C++之间的任何兼容问题。 ((感谢您的解释) – hardCode

+0

您已经发布了这个问题,这是一个重复的问题,虽然我没有权限查看您删除的旧问题,但如果它因重复而关闭,则发布相同 – tambre

回答

0

您的链接器无法找到mupdf的导入库,或者您的名称存在mangling/decoration类型问题。

下载并构建mupdf后,应该有一个导入库供您链接。你链接到它?在链接器>> Input >> Additional Dependencies下查看项目链接器设置。你有没有添加这样的导入?

如果不是,请将其添加进去。不应该很难找到。它可能就在您下载(或构建)的mupdf DLL旁边。

假设你已经添加它,你的下一步是验证你是否正确地找到它。看看构建输出。你有没有收到警告?不,将链接器>>常规>>显示进度更改为“显示所有进度消息”并重新构建。有关于图书馆或功能的警告吗?

我能想到的最后一种可能性是DLL实际上将其函数作为C++(即带有名称装饰)导出,而不是作为外部“C”。在这种情况下,你的外部“C”括号不属于那里。或者反之亦然(也许你没有在#include的所有地方使用extern“C”)。我可以看到你的例子使用它,但所有的地方呢?

如果您正在构建mupdf.DLL,请确保它的构建方式与您的客户端代码具有相同的调用约定。