【问题标题】:.lib error when I'm using a dll?使用 dll 时出现 .lib 错误?
【发布时间】:2011-07-22 14:33:49
【问题描述】:

我正在尝试使用 Windows DLL(不习惯它们)进行一些练习。我关注了这篇文章:

http://msdn.microsoft.com/en-us/library/ms235636(v=vs.80).aspx

信不信由你。

然而,我收到了这个错误:

1>LINK : 致命错误 LNK1104: 无法打开文件 '..\debug\math.lib'

我的项目是 dll 项目,而不是 lib。而且根本没有从我的项目中创建任何库(整个解决方案)。

有人知道怎么回事吗?

【问题讨论】:

  • 您是在 DLL 项目上还是在控制台应用程序项目上收到链接错误?
  • win32 项目本身。我认为可能是因为并非我的所有班级成员都使用 __declspec(dllimport) 语句声明?
  • 两个项目都是win32项目。是.dll项目还是.exe项目
  • 指令说 __declspec(dllexport)

标签: c++ windows dll


【解决方案1】:

这可能是由于您在 DLL 项目上为主项目添加的依赖项

在 Visual Studio 2008 中,该设置位于:Project Dependencies,只需取消选中 DLL 项目即可解决问题。

此外,您可以验证:DLL 'Lib's 的路径不再包含在您的主项目的“链接器”命令行中:Configuration Properties > Linker > Command Line

【讨论】:

    【解决方案2】:

    如果 dll 实际上没有导出任何东西,VS 不会创建导入库。要快速检查是否是您的情况,请找到您的 dll,使用 dependency walker 打开它并查看是否有任何导出。

    如果您发现导出丢失,请检查您是否确实将任何内容标记为导出:通过将类/函数声明为“__declspec(dllexport)”(当标头包含在 dll 中,dllimport 包含在 exe 中时)或 extern“C”加上模块定义(.def)文件。

    【讨论】:

    • 对我来说,__declspec(dllexport) 是解决我问题的方法。我希望这仍然是 2017 年最先进的解决方案
    【解决方案3】:

    您的 .dll 项目可能正在创建一个导入 .lib。这简化了 DLL 的使用。导入 .lib 是一个简单的库,具有与您的 dll 相同的功能,但它没有实现——当您使用它时,它会加载 dll,然后将您进行的调用转发给 dll。

    或者,控制台项目可能认为您有一个 import .lib - 但您没有。

    创建/使用您拥有的 dll 的说明有点奇怪。我不这样做(使用“添加引用”对话框)。您可能需要查看您的项目设置,看看您是否看到任何对 math.lib 的引用——或任何有关创建导入 .lib 的内容。

    另外,检查 .dll 项目上的输出目录,看看是否创建了 math.lib(或任何 .lib)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多