未解决的外部符号错误从构建库切换到exe或dll

时间:2008-10-03 18:30:45

标签: c++ visual-studio-2005 linker

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

起初我以为我没有设置到我引用的第三方库的路径,所以我将该文件夹添加到我的路径变量中,甚至将它添加到我的包含,引用和源文件中,确保我拥有所有的路径。

我仍然收到错误:

  

错误LNK2019:未解析的外部   符号“__declspec(dllimport)public:   静态无效       __cdecl xercesc_2_8 :: XMLPlatformUtils :: Initialize(char   const * const,char const *   const,类xercesc_2_8 :: PanicHandler   * const,类xercesc_2_8 :: MemoryManager *   常量,布尔)”   (__imp_?初始化@ XMLPlatformUtils @ @@ xercesc_2_8 @ SAXQBD0QAVPanicHandler 2 @ QAVMemoryManager @ 2 @ _N @ Z)   在函数“void __cdecl中引用   XSD :: CXX :: XML ::初始化(空)”   (?初始化@ XML @ CXX @ @@ XSD YAXXZ)

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

有人有任何想法吗?

3 个答案:

答案 0 :(得分:2)

您还需要指定您希望特别链接该库。链接路径只告诉链接器您需要查找的数据,而不是要查找的内容。您还需要指定要链接到相关库(xerces?)。

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

答案 1 :(得分:2)

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

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

确实,在VC2008(和2005年,如果我记得很清楚),使用项目属性 - >链接器 - >输入 - >其他依赖项。你需要的库是用空格分隔的(奇数,嘿?)

祝你好运!

答案 2 :(得分:0)

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

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