未解决的外部符号错误从生成库切换到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?)。我们可能需要在"其他库路径"下添加其位置。