Visual Studio 2008中棘手的链接错误

问题描述:

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

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

如何解决此错误?

错误22错误LNK2019:解析外部符号 “__declspec(dllimport的)INT __cdecl ast_get_int_value(结构ast_node *,无效*)”(__imp_ ast_get_int_value @@ YAHPAUast_node @@ PAX @ Zβ)函数引用“双__cdecl d_low(结构ast_node *,结构ast_node *,结构ast_node *,结构ast_node *,无效*)”(?d_low @@ YANPAUast_node @@ 000PAX @ Z)main.obj主要

明白了 - 必须正确点击该项目,进入“Linker”和“Input”和“Additional Dependencies”,并添加“.. \ $(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或System目录中是可以接受的做法,但现在认识到这会导致问题,因此不应该这样做。

,另请参阅:

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

和:

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