未解决的外部符号错误从生成库切换到exe或者dll
时间:2020-03-06 15:05:24 来源:igfitidea点击:
我正在将应用程序构建为库,但是为了确保可以获得所需的输出,我将其切换以生成exe。一经发现,关于未解析的外部符号的几个错误就出现了。
起初,我以为我没有设置要引用的第三方库的路径,所以我将文件夹添加到我的路径变量中,甚至将其添加到我的包含,引用和源文件中,只是为了确保我走了所有的路。
我仍然收到错误:
error LNK2019: unresolved external symbol "__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) referenced in function "void __cdecl xsd::cxx::xml::initialize(void)" (?initialize@xml@cxx@xsd@@YAXXZ)
我在这里问这个问题的原因是因为在Visual Studio中,当我将其构建为库时,没有出现这些错误,但是作为dll和exe却可以。
有人有什么想法吗?
解决方案
我们还需要特别指定要链接到该库的链接。链接路径仅告诉链接器我们需要查找的数据在哪里,而不是要查找的内容。我们还需要指定我们要链接到所涉及的库(xerces?)。
不幸的是,我不知道如何在MSVC中指定它,但是它可能在"链接器选项"下。
建立一个库,链接器不需要解析导入的符号。只有当它开始将目标文件和库链接在一起时,才会发生这种情况。
这就是为什么我们仅在生成可执行文件时才看到错误。
确实,在VC2008(和2005年,如果我还记得的话)中,请使用项目属性->链接器->输入->其他依赖项。我们需要的库之间用空格分隔(奇数,嘿?)
祝你好运!
如@coppro所说,我们需要指定要与该库链接。当我们生成EXE或者DLL时,将运行链接器,并且链接器需要查找我们正在使用的所有功能,而要构建库,则运行库管理器,并且不必解析所有函数引用(但是我们在EXE中使用该库,则必须再次这样做)。
因此,转到项目的选项,"链接器选项","输入",然后在"其他库路径"下列出定义缺少的函数的库(xerces.lib?)。我们可能需要在"其他库路径"下添加其位置。