Visual Studio 2008中的棘手链接错误

时间:2010-06-21 22:29:19

标签: visual-studio-2008 linker dynamic-linking

在Visual Studio 2008中,我有一个包含两个项目的解决方案:一个项目是.dll,另一个是调用.dll的命令行应用程序。

如果我删除其中一个文件(“ast.c”),然后将其直接添加回来,我会收到以下错误。

如何解决此错误?

  

错误22错误LNK2019:未解析的外部符号“__declspec(dllimport)int __cdecl ast_get_int_value(struct ast_node *,void *)”(__ imp_?ast_get_int_value @@ YAHPAUast_node @@ PAX @ Z)在函数“double __cdecl d_low”中引用ast_node *,struct ast_node *,struct ast_node *,struct ast_node *,void *)“(?d_low @@ YANPAUast_node @@ 000PAX @ Z)main.obj main

1 个答案:

答案 0 :(得分:2)

得到它 - 必须右键单击该项目,进入“链接器”和“输入”和“其他依赖项”,并添加“.. \ $(ConfigurationName)\ dll.lib”。文件“dll.lib”是作为.dll的编译过程的一部分创建的,我们需要告诉链接器该文件的位置,以便它可以解析任何外部依赖项。这一劳永逸地修复了链接错误。

来自http://www.codeproject.com/KB/DLL/XDllPt1.aspx的一些很好的提示解释了链接过程:

  • DLL导出其符号,应用程序导入DLL符号。编译应用程序时,编译器通过包含文件(Test.h)查看DLL符号。链接应用程序时,链接器通过导入库(Test.lib)查看DLL符号。
  • 运行应用程序时,DLL必须与EXE位于同一目录中。在早期版本的Windows中,将应用程序DLL放在Windows或系统目录中是可以接受的做法,但现在已经认识到这会导致问题,不应该这样做。

还看到:

http://support.microsoft.com/kb/815065

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/a22571ad-ef89-4f94-afca-4f4d32cdd0f2