从生成库切换到exe或dll时出现无法解决的外部符号错误

Unresolved External Symbol Errors switching from build library to exe or dll

本文关键字:解决 错误 符号 外部 dll exe      更新时间:2023-10-16

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

起初,我认为我没有设置指向引用的第三方库的路径,所以我将文件夹添加到路径变量中,甚至将其添加到include、references和源文件中,只是为了确保我拥有所有路径。

我仍然得到错误:

错误LNK2019:未解析的外部symbol"__declspec(dllimport)public:静态空隙__cdecl xercesc_2_8::XMLPlatformUtils::Initialize(charconst*const,char const*const,类xercesc_2_8::PanicHandler*const,类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,我得到了。

有人有什么想法吗?

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

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

事实上,在VC2008(和2005,如果我记得很清楚的话)中,使用项目属性->Linker->Input->Additional dependencies。你需要的库需要用空格分隔(奇怪,嘿?)

祝你好运!

您还需要指定要链接到该库。链接路径只是告诉链接器需要查找的数据在哪里,而不是要查找什么。您还需要指定您正在针对有问题的库(xerces?)进行链接。

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

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

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