为什么在Visual Studio编译C++项目时会出现致命错误"LNK1104: 无法打开文件'C:\Program.obj'"?

134

我在Visual Studio 2008中创建了一个新的C++项目,目前还没有编写任何代码,只改变了项目设置。

当我编译该项目时,我收到以下致命错误:

致命错误 LNK1104: 无法打开文件'C:\Program.obj'

27个回答

170
这个问题是由于在路径中指定了带有空格的lib文件的依赖引起的。为了使项目能正确编译,路径需要用引号括起来。
在项目属性的“配置属性 -> 链接器 -> 输入”选项卡中,有一个“附加依赖项”属性。通过添加引号来解决这个问题。例如,将该属性从以下内容更改为:
C:\Program Files\sofware sdk\lib\library.lib
更改为:
"C:\Program Files\sofware sdk\lib\library.lib"
我在这里添加了引号。

21
上帝啊,你只用了30秒就把原本需要两天才能解决的错误修复好了 :) - jb.
11
我也遇到过同样的问题。如果你的链接器正确但你的库目录设置不正确,可能会出现同样的错误。尝试查看“配置属性 -> VC++目录 -> 库目录”,以查看是否正确设置了库。有时lib文件夹可能包含x86和x64文件夹。你需要将其设置为其中一个(取决于你的编译器),而不是包含两者的文件夹。 - M4st3rM1nd
1
不要忘记在"C:\Program Files\sofware sdk\lib\library.lib"后面加上分号。缺少分号也会导致项目编译错误。 - roscioli
1
在尝试使用Visual Studio 2005(在Windows 8.1上)构建OpenCV时遇到了这个问题...然后解决了它。太好了! - AlainD
1
我尝试了一下,但对我没有用。 “Qt5Xmld.lib”;“Qt5XmlPatternsd.lib”;“Qt5Cored.lib”;%(AdditionalDependencies) - 我应该改变什么? - STF
显示剩余6条评论

78

如果文件仍在运行,则可能会发生这种情况。

:-1: 错误: LNK1104: 无法打开文件“debug\****.exe”


6
这也是我的问题! - Kamran Bigdely
1
我遇到了这个问题,是由于Microsoft Security Essentials将文件锁定所致。 - Synetech
1
是的,关闭了之前的控制台窗口,突然间库文件就可以被读取了。 - Kari
我退出并重新登录,这起到了作用。显然我没有正在运行的*.exe文件,并尝试重新启动VS,但效果不佳。 - Karan Shah
我发现我的 .exe 文件还在运行,于是我用任务管理器将其关闭。 - Kambiz Rostami

17

关闭并重新打开Visual Studio之后,问题就消失了。不确定为什么会出现这个问题,但值得一试。

这是在Windows 8.1上的VS 2013 Ultimate版本。


7
啊,微软……我们第一次尝试的应该是关闭并重新打开(或者关掉再开机)——这样做可以解决一些神秘的错误问题。 - Leonardo Alves Machado
2
我感到非常羞愧,因为这个解决方案可以解决我的问题。现在,我不能再出去见我的朋友和家人了。 - javaLover
2
你和Carol遇到了相同的问题。 - amod

10

同时请确保你没有启用以下选项:配置属性 -> C/C++ -> 预处理器 -> 预处理到文件


在我的情况下也是这个问题,但是,如果我确实希望打开此标志(以查看预处理文件),我该怎么办? - Guy Avraham
2
这里有一些解决方法:如何输出预处理代码并编译它(Visual Studio)使用/p参数(预处理到文件)编译项目(VS 2008)无法编译。但本质上它是一个编译器选项,所以它只能做其中之一而不能同时做两个。 - Assaf Levy

8
我的问题是缺少了“.lib”扩展名,我只是在链接“mylib”,然后VS决定寻找“mylib.obj”。

4
解决方案1(适用于我的情况):重新启动Windows Explorer进程(是的,Windows文件管理器)。
解决方案2:
  1. 关闭Visual Studio。注销Windows
  2. 登录,重新打开Visual Studio
  3. 像往常一样构建。现在可以构建并访问有问题的文件。
我认为有时文件系统或控制它的人会失去其权限。在重新启动Windows会话之前,尝试终止僵尸msbuild32.exe进程,重新启动Visual Studio,检查是否没有显示出问题的文件。没有构建配置问题。这种情况偶尔会发生。Windows内部的某些东西没有修复好,需要重新启动。

我在使用VS2019时遇到了这个问题...但是现在已经解决了...很惊讶bug还是存在的。谢谢。 - JHBonarius

4
我曾经遇到过同样的问题。这是因为附加库路径中的一个文件夹名称中包含了逗号。通过更改附加库路径解决了这个问题。

3

我遇到了同样的问题,但我找不到答案可以解决我的情况。

我的杀毒软件 (AVG) 将文件 MyProg.exe 判定为病毒并将其放入“病毒仓库”中。你需要检查这个仓库,如果文件在里面,就恢复它。这帮助了我解决了问题。


同样的问题!BitDefender正在阻止对文件的访问。 - Kintaro

3
在我的情况下,这是一个引用错误的问题。项目引用了另一个项目的输出,但后者没有输出前者正在寻找的文件。

2
我曾遇到相同的错误,是由于我安装了一个Nuget包(不是头文件),然后尝试卸载它。对于我来说,问题在于我仍然在我的一个.cpp文件中包含了一个我刚刚卸载的包的头文件(非常愚蠢)。我甚至删除了链接到它的其他库目录(在“项目->属性->链接器->常规”下),但当然没有用,因为我仍然在尝试引用不存在的头文件。
在这种情况下,这绝对是一个令人困惑的错误信息,因为头文件名是,但错误提示是“无法打开文件'llibboost_filesystem-vc140-mt-gd-1_59.lib'”,而且没有行号或其它信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接