1

我正在将应用程序构建为库,但为了确保可以获得所需的输出,我将其切换为生成 exe。一旦我这样做了,我就收到了几个关于未解析的外部符号的错误。

起初我以为我没有为我引用的 3rd 方库设置路径,所以我将文件夹添加到我的路径变量中,甚至将它添加到我的包含、引用和源文件中,只是为了确保我有所有的路径。

我仍然收到错误:

错误 LNK2019:未解析的外部符号“__declspec(dllimport) public: static void __cdecl xercesc_2_8::XMLPlatformUtils::Initialize(char const * const,char const * const,class xercesc_2_8::PanicHandler * const,class xercesc_2_8::MemoryManager * const, bool)" (__imp_?Initialize@XMLPlatformUtils@xercesc_2_8@@SAXQBD0QAVPanicHandler@2@QAVMemoryManager@2@_N@Z) 在函数 "void __cdecl xsd::cxx::xml::initialize(void)" (?initialize@xml @cxx@xsd@@YAXXZ)

我在这里问它的原因是因为在 Visual Studio 中,当我将它构建为库时,我没有收到这些错误,但作为 dll 和 exe,我会。

有人有什么想法吗?

4

3 回答 3

2

您还需要指定您希望特别链接到该库。链接路径仅告诉链接器您需要查找的数据在哪里,而不是要查找的内容。您还需要指定您要链接到有问题的库(xerces?)。

不幸的是,我不知道如何在 MSVC 中指定它,但它可能位于“链接器选项”下。

于 2008-10-03T18:35:58.513 回答
2

构建一个库,链接器不需要解析导入的符号。只有当它开始将目标文件和库链接在一起时才会发生这种情况。

这就是为什么您在构建可执行文件时才开始看到错误的原因。

确实,在 VC2008(和 2005,如果我没记错的话)中,使用项目属性 -> 链接器 -> 输入 -> 附加依赖项。您需要的库用空格分隔(奇怪,嘿?)

祝你好运!

于 2008-10-03T18:50:03.943 回答
0

正如@coppro 所说,您需要指定要与该库链接。当你构建一个 EXE 或 DLL 时,链接器会运行,它需要找到你正在使用的所有函数,但是要构建一个库,运行库管理器,它不必解析所有函数引用(但是当您在 EXE 中使用该库,您将不得不再次)。

因此,转到项目的选项、链接器选项、输入,并在 Additional Library Paths 下列出定义缺失函数的库 (xerces.lib?)。您可能需要在 Additional Library Paths 下添加其位置。

于 2008-10-03T18:52:23.737 回答