Dll项目不构建为链接器无法找到相同的命名.lib文件

时间:2011-07-11 07:30:38

标签: visual-studio-2010 linker

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

这里X是从同一个项目创建的lib文件的名称,X.dll是输出dll。事实上,X.lib不在项目中。如果没有成功构建项目,那么Dll就不会成功构建。我怎样才能解决这种“死锁”的情况呢?

提前致谢,

石咀

1 个答案:

答案 0 :(得分: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来解决问题,当然。这样做的缺点是,执行Clean构建不会清除C:/ a_new_location / lib。但至少它构建了。