C++ 在C+中编译C库+;。联系问题。MuPDF

C++ 在C+中编译C库+;。联系问题。MuPDF,c++,c,visual-studio,static-linking,mupdf,C++,C,Visual Studio,Static Linking,Mupdf,我尝试了多个PDF数据库,MUPDF是我构建自己的小型PDF应用程序的最后机会。但在这里我也有问题。在此之前,我对LNK4098:defaultlib'MSVCRT'有问题,但我解决了这一问题,为所有MUPDF库/MDd版本设置了。大多数错误在那之后都解决了,但我仍然无法解决这个问题: error LNK2001: unresolved external symbol "void __cdecl pdfapp_open(struct pdfapp_s *,char *,int)" (?pdfap

我尝试了多个PDF数据库,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>
}
我在应用程序中只使用了三个函数。我检查了libs和headers链接,设置了项目调试、x64和/MDd,但得到的结果相同。
老实说,我在None-libs中找不到这三个函数。我不是编程专家,但我知道函数字符串应该在libs中找到,不是吗?在我的例子中,这是什么意思?

您的链接器找不到mupdf的导入库,或者您有名称损坏/装饰类型问题

下载并构建mupdf后,应该有一个导入库供您链接。你链接到它了吗?在“链接器>>输入>>其他依赖项”下查看项目链接器设置。您添加了这样的导入吗

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

假设您已经添加了它,下一步就是验证您是否正确地找到了它。查看构建输出。你收到关于此事的警告了吗?否,将链接器>>常规>>显示进度更改为“显示所有进度消息”,然后重新生成。是否有关于库或函数的警告

最后一个可能的想法是DLL实际上是作为C++输出的函数(即名字修饰),而不是作为外部“C”。在这种情况下,你的外部“C”括号不属于那里。或者反之亦然(也就是说,您可能没有在所有包含外部“C”的地方使用它)。我可以看到你的例子使用了它,但这是所有的地方吗


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

C和C++是不同的语言。它们有一个足够大的公共子集来编写程序,但没有专门编写和维护以符合这两种标准的程序很可能在一种或另一种语言中无效。如果您有一个C库,那么使用C编译器构建它。在C++模式下运行时,MSVC++不是一个符合C语言的编译器,它在C++模式下运行时,它并不是一个符合C语言的编译器。它的C模式可能足够好,以构建你的特定C代码,但是,尤其是如果它是旧代码。@约翰·布林格我认为ExtEngCc必须解决C Nand C++之间的任何兼容性。((感谢您的解释。您已经发布了此问题。它是一个重复的问题。虽然我没有权限查看您删除的旧问题,但如果该问题因重复而关闭,则在删除/关闭后发布相同的问题将导致禁令或其他处罚。抱歉,这是一个新问题,有新问题s、 确实,我前面的问题被复制并删除了。@硬代码,不,一点也不。
extern“C”
用C++表示函数所以声明了C链接。这使得可以将它们链接到C并调用它们,但是与实现无关,必须实现C++(因为语法是C++唯一的特性”。
error LNK2001: unresolved external symbol pdfapp_open
//more 3 errors