【问题标题】:Dll project doesn't build as Linker not able to find the same named .lib file由于链接器无法找到同名的 .lib 文件,DLL 项目无法构建
【发布时间】:2011-07-11 07:30:37
【问题描述】:

我是 Visual Studio 2010 环境的新手。我有一个使用 Visual Studio 2008 开发的源代码库。我正在尝试在 VS 2010 中构建它;但构建失败,因为链接器说错误 - 链接:致命错误 LNK1181:无法打开输入文件 X.lib'。

这里 X 是从同一个项目创建的 lib 文件的名称,X.dll 是输出 dll。事实上,X.lib 并不存在于项目中。如果没有成功构建项目,则 Dll 根本不会成功构建。我该如何解决这种“死锁”的情况?

提前致谢,

石菊

【问题讨论】:

  • 您的描述不清楚。 X 是您的解决方案中的一个项目以及另一个使用 X 的项目吗?如果是这样,为什么不能只构建 X 项目?如果没有,请进一步描述您解决方案中的项目...
  • 嗨,项目 X 在我的解决方案中。该解决方案还有另外几个项目。项目 X 使用其他项目生成的 Dll。那部分很好。问题是,我清理了解决方案并删除了发布文件夹中存在的 X.lib 文件。稍后当项目 X 构​​建时,它应该创建 X.dll。但是提到了解决方案中不存在的“X.lib”的输入依赖项。这个 X.lib 只有在项目 X 成功构建后才会创建,对吧?所以我认为这种情况类似于“死锁”。

标签: visual-studio-2010 linker


【解决方案1】:

我也有这个问题。将工作中的 VS2008 项目转换为 VS2010 时,VS2010 项目中的链接阶段中断,并出现相同的错误。它正在尝试链接项目应该构建的 .lib!

我找到了问题的根源:该项目有一个自定义构建步骤,该步骤发生在构建结束时,在 PostBuildEvent 之前。此自定义构建步骤将 .dll、.lib 和 .pdb 从 $(OutDir) 复制到外部位置。

自定义构建步骤的输出列表设置为复制的 .dll、.lib 和 .pdb 的完整路径,例如:

C:/a_new_location/myproject.dll;
C:/a_new_location/myproject.lib;
C:/a_new_location/myproject.pdb.

我发现,只要此输出列表包含 .lib,该 .lib 就会添加到要在链接阶段链接的文件列表中。所以有了上面的输出列表,链接阶段会有一个文件列表:

myprojectfile1.obj
myprojectfile2.obj
C:/a_new_location/myproject.lib

这会导致链接失败:

LINK : fatal error LNK1181: cannot open input file 'C:\a_new_location\G4SrcCfgLib.lib'

自定义构建步骤中的副本是否实际复制文件并不重要。重要的是输出列表包含 .lib。所以,我当然通过从输出列表中删除 .lib 来解决问题。这样做的缺点是执行清理构建不会清理 C:/a_new_location/lib。但至少它可以构建。

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 2020-11-21
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2022-07-30
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多