在 Visual Studio 中编译 C + + 项目时,为什么会出现致命错误“ LNK1104: can not open file‘ C: Program.obj’”?

我已经在 VisualStudio2008中创建了一个新的 C + + 项目。尚未编写代码; 只更改了项目设置。

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

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

482777 次浏览

这个特殊的问题是由于指定了一个在其路径中有空格的 lib 文件的依赖关系而引起的。路径需要用引号包围,以便项目正确编译。

在项目属性的 配置属性-> 链接器-> 输入选项卡上,有一个 其他附属事项属性。通过添加引号修复了这个问题。例如,将此属性从:

C: Program Files 软件 Sdk lib library. lib

致:

C: 程序文件软件 Sdk lib library. lib”

我在上面加了引号。

我也有同样的问题。它是由一个“ ,”在一个附加库路径的文件夹的名称中引起的。它通过更改附加库路径来解决。

如果文件仍然在运行,就会发生这种情况。

: : 1: error: LNK1104: can not open file‘ debug * * * . exe’

对我来说,这是一个错误的引用问题。Project 引用了另一个项目的输出,但后者没有输出前者正在查找的文件。

对于一个组装项目(ProjectName-> Build Dependency-> Build Customations-> masm (select)) ,将 生成预处理源清单设置为 没错对我来说也是一个问题,清除设置修复了它。这里是 VS2013。

我遇到了同样的问题,链接器抱怨主可执行文件丢失。这发生在我们对新 Visual Studio 2013的解决方案端口期间。解决方案是托管和非托管项目/代码的不同组合。问题(和修复)最终成为解决方案文件夹中缺少的 < em > app.config 文件。花了一天的时间才弄清楚这一点: (,因为输出日志不是很有帮助。

我根据这个列表检查了所有的设置: http://msdn.microsoft.com/en-us/library/ts7eyw4s.aspx#feedback。这对我很有帮助,对于我的情况,我发现链接依赖项目的属性有双引号,这不应该存在。

在关闭并重新打开 VisualStudio 之后,这个问题就消失了。不知道为什么会出问题,但是值得一试。

这是在 VS 2013终极版 Windows 8.1上发布的。

我回答这个问题是因为我没有看到其他人列出了这个特殊的解决方案。

显然,我的防病毒程序(Ad-Aware)标记了我的一个项目所依赖的 DLL,并将其删除。即使在排除了 DLL 所在的目录之后,同样的行为仍在继续,直到我重新启动计算机。

我的问题是缺少 .lib扩展,我只是链接到 mylib和 VS 决定寻找 mylib.obj

还要检查你是否打开了这个: 配置属性-> C/C + +-> 预处理器-> 文件预处理

我有同样的错误,只是与一个 Nuget 包我已经安装(一个不是头) ,然后试图卸载。
我的问题是,我仍然包括一个头为包,我刚刚卸载在我的一个。Cpp 文件(非常愚蠢,是的)。
我甚至在 Project -> Properties -> Linker -> General中删除了指向它的附加库目录链接,但是当然没有用,因为我仍然试图引用不存在的头文件。

在这种情况下,肯定是一个令人困惑的错误消息,因为头文件的名称是 <boost/filesystem.hpp>,但错误给了我 "cannot open file 'llibboost_filesystem-vc140-mt-gd-1_59.lib'",没有行号或任何东西。

我也遇到过同样的问题,但是解决方案并没有列在答案中。 我的防病毒程序(AVG)确定文件 MyProg.exe为病毒,并将其放入“病毒仓库”。你需要检查这个仓库,如果文件在那里-然后只是恢复它。帮了我大忙。

解决方案1(对我来说) : 重新启动文件资源管理器进程(是的,windows 文件管理器)。

解决方案2:

  1. 关闭 VisualStudio.Windows 注销
  2. 登录,重新打开 Visual Studio
  3. 像往常一样构建。它现在构建并可以访问有问题的文件。

我认为有时候文件系统或者控制它的人会因为它的权限而丢失。在重新启动 Windows 会话之前,试图杀死僵尸 msbuild32.exe进程,重新启动 Visual Studio,甚至没有检查显示问题文件。没有构建配置问题。这种事时有发生。一些内部的事情在 Windows 不修复,需要重新启动。

在我的例子中,我用 GLM 替换了之前游戏引擎图形课程中的数学库文件。问题是我没有将它们添加到 VisualStudio 的解决方案资源管理器中的项目中(即使它们在项目存储库中)。

我有这个问题与 LNK2038错误一起,遵循这个 邮寄来隔离释放和调试 DLL。在这个过程中,我清理了这些依赖项所在的整个文件夹。

幸运的是,我已经备份了所有这些文件,并得到了这个错误的文件被抛回到 DEBUG 文件夹来解决这个问题。这个错误代码在某种程度上是误导性的,因为我不得不花费大量的时间再次从这篇文章的一个答案中得到这个技巧。

希望这个答案能帮助有需要的人。

我用 增加现有计划我的 解决方案解决了它,这是我第一次用 忘记加了

我也遇到了同样的问题,我只是将代码复制到新项目并开始构建。 一些其他的错误开始出现。 Error C4996: ‘ fopen’: 此函数或变量可能不安全。请考虑改用 fopen _ s

为了再次解决这个问题,我在 Project 项目中添加了一个属性,如下所示。 Project-> Properties-> Configuration property-> c/c + + . 在这个类别中有字段名称预处理器定义 为了解决这个问题,我已经添加了 _ CRT _ SECURE _ NO _ WARNings 希望对你有帮助。

谢谢你

我犯了同样的错误:

fatal error LNK1104: cannot open file 'GTest.lib;'

这是由最后的 ;引起的。如果您有多个库,它们应该用空格(空格键)分隔,不要使用逗号或分号!

因此,在 Project properties >> Configuration Properties >> Linker >> Input 中列出库时,不要使用 ;或其他任何东西

我在“ VisualStudio2013”中遇到了同样的问题。

LNK1104: cannot open file 'debug\****.exe

它解决后关闭和重新启动视觉工作室。

我尝试了以上的解决方案,但没有为我工作。 所以我重命名 exe 并重新构建解决方案。 对我有用。

在 Visual Studio 2019中构建 VC + + DLL 时,我犯了这样一个错误:

LNK1104: 无法打开文件‘ C: Program.obj’

在项目属性 > 链接器 > 输入 > 模块定义文件下,我指定了一个在文件名末尾有 无与伦比的双引号的 def 文件。删除不匹配的双引号解决了这个问题。

杀了 msbuild32.exe然后重建,我成功了。

我的问题是由我试图调试的 使用. dll 的其他应用程序文件引起的。

使用. dll 关闭 应用程序解决了这个问题。

在我的例子中是路径长度(包括文件名)。

..\..\..\..\..\..\..\SWX\Binary\VS2008\Output\Win32\Debug\boost_unit_test_framework-vc90-mt-gd-1_57.lib;

至于发行版,路径是(这个工作正确) :

..\..\..\..\..\..\..\SWX\Binary\VS2008\Output\Win32\Release\boost_unit_test_framework-vc90-mt-1_57.lib;

= = > 1个字节。

  1. 我还通过重命名 lib 文件(使用较短的名称)并在

链接器-> input-> 附加依赖项

  1. 我还通过添加绝对路径而不是相对路径来验证这一点。”。也扩展了路径字符串。这也奏效了。

所以对我来说问题是路径 + 文件名字符串的总大小太长了!

可能的解决办法:

  1. 检查路径是否包含任何空白,转到属性 > 链接器 > 输入 > 附加路径并包含“带空白的路径”

  2. 如果程序仍在运行,请关闭所有程序并重新启动。

  3. 检查一下。没有创建 obj 文件。当属性 > C + + > 预处理器 > 生成预处理器文件处于打开状态时,直接构建项目时会发生这种情况。关闭它并构建项目,然后你可以在属性 > C + + > 预处理器 > 生成预处理器文件。

我也遇到过类似的问题。我用以下命令解决了这个问题,终止了正在运行的任务:

Taskkill/f/im [ nameOfExe ]

/f: 强制关闭任务。 /im: 下一个参数是一个图像名,即可执行文件名,例如 Program.exe。