用C ++编译C库。链接问题。 MuPDF

时间:2017-05-31 15:45:14

标签: c++ c visual-studio static-linking mupdf

我尝试了多个PDF lybrary,MUPDF是我构建自己的小型PDF应用程序的最后机会。但在这里我也有问题。在此之前我遇到了LNK4098的问题:defaultlib' MSVCRT',但我解决了这个问题,设置了所有MUPDF库/ MDd版本。之后大多数错误都解决了,但我仍然无法解决这个问题:

error LNK2001: unresolved external symbol "void __cdecl pdfapp_open(struct pdfapp_s *,char *,int)" (?pdfapp_open@@YAXPEAUpdfapp_s@@PEADH@Z)
//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

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

1 个答案:

答案 0 :(得分:0)

您的链接器无法找到mupdf的导入库,或者您有名称修改/装饰类型问题。

下载并构建mupdf后,应该有一个导入库供您链接。你链接到它了吗?查看链接器&gt;&gt;下的项目链接器设置输入&gt;&gt;额外的依赖关系。你添加了这样的导入吗?

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

假设您已添加它,您的下一步是验证您是否正确找到它。查看构建输出。你有关于它的警告吗?不,更改链接器&gt;&gt;一般&gt;&gt;显示进度到&#34;显示所有进度消息&#34;并再次建立。是否有关于库或函数的警告?

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

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