2

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

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

如何修复此错误?

错误 22 错误 LNK2019:函数“double __cdecl d_low(struct ast_node *, struct ast_node *,struct ast_node *,struct ast_node *,void *)" (?d_low@@YANPAUast_node@@000PAX@Z) main.obj main

4

1 回答 1

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

于 2010-06-21T22:56:46.777 回答