【问题标题】:Tricky linking error in Visual Studio 2008Visual Studio 2008 中的棘手链接错误
【发布时间】:2010-06-21 22:29:19
【问题描述】:

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

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

如何解决这个错误?

错误 22 错误 LNK2019:函数“double __cdecl d_low(struct ast_node *,void *)”(__imp_?ast_get_int_value@@YAHPAUast_node@@PAX@Z) 引用了无法解析的外部符号ast_node *,struct ast_node *,struct ast_node *,struct ast_node *,void *)" (?d_low@@YANPAUast_node@@000PAX@Z) main.obj main

【问题讨论】:

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


    【解决方案1】:

    知道了 - 必须右键单击项目,进入“链接器”、“输入”和“附加依赖项”,然后添加“..\$(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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多