【发布时间】:2017-11-01 12:31:41
【问题描述】:
我尝试了多个 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>
}
但我得到这个错误:
error LNK2001: unresolved external symbol pdfapp_open
//more 3 errors
我在我的应用程序中只使用了三个函数。我检查了库和头文件链接,我也设置了我的项目调试、x64、/MDd,但我得到了相同的结果。 老实说,我在任何一个库中都找不到这三个函数。我不是编程专家,但我知道函数字符串应该在库中找到,不是吗?在我的情况下,这个错误是什么意思?
【问题讨论】:
-
C 和 C++ 是不同的语言。它们有一个足够大的公共子集来编写程序,但未专门编写和维护以符合这两种标准的程序很可能在一种语言或另一种语言中无效。如果您有 C 库,则使用 C 编译器构建它。在 C 模式下运行时,MSVC++ 不是符合标准的 C 编译器,在 C++ 模式下运行时,它肯定不是符合标准的 C 编译器。但是,它的 C 模式可能足以构建您的特定 C 代码,特别是如果它是旧代码。
-
@John Bollinger 我认为 extern C 必须解决 C n 和 C++ 之间的任何兼容性问题。 ((感谢您的解释。
-
您已经发布了这个问题。这是重复的。虽然我无权查看您删除的旧问题,但如果它因重复而被关闭,那么在删除/关闭后发布相同的问题将导致禁令或其他处罚。跨度>
-
对不起,这是新问题的新问题,不会重复。确实,我之前的问题被重复了,被删除了。
-
@hardCode,不,一点也不。
extern "C"表示(在 C++ 中)如此声明的函数具有 C 链接。这使得将它们链接到 C 并从 C 调用它们成为可能,但这与它们的实现无关,它仍然必须符合 C++(因为extern "C"语法是 C++ 独有的功能)。
标签: c++ c visual-studio static-linking mupdf