ld.exe: 无法打开输出文件...:权限被拒绝。

61

我最近在Windows 7 Ultimate 32位上安装了带有mingw32的CodeBlocks,以便恢复我的C编程技能,但这个问题让我有些困惑。

我决定写一个简短的Fibonacci生成器来确保我的安装正常工作,但我遇到了一个障碍。

该程序成功编译、链接等,并生成一个可执行文件按预期运行。

如果我尝试再次编译,就会出现以下问题:

c:/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/bin/ld.exe: cannot open output file bin\Debug\Fibonacci.exe: Permission denied

我甚至无法编辑生成可执行文件的权限。

我已经检查了常见的问题:

  • 可执行文件确实没有在运行。
  • mingw32对可执行文件的路径是读/写的(否则在第一次构建时就无法成功)
  • 我没有以任何形式运行cygwin。

有趣的是:通常情况下,使用mingw32生成的任何显示“拒绝访问”行为的可执行文件会在几分钟后自动消失,而我并没有进行任何干预。

我已经在谷歌上搜索过了,但大多数其他结果都是含糊不清的或者不适用。

我想知道是否有Windows 7安全设置正在影响我的.exe文件,但我对Win 7的了解还不够深入,不知道从哪里开始搜索。

有人有什么想法吗?


4
这只是一种猜测……如果你正在构建到bin\Debug目录下,那么code::blocks可能会在其集成调试器中执行某些操作,保持对可执行文件的文件句柄打开状态。尝试构建发布版本,看看是否有同样的问题。 - Rag
1
我认为@BrianGordon的猜测是正确的。如果程序正在运行,在尝试重新构建之前,请将其终止。 - Keith Thompson
2
可执行文件消失了?就是它们会自动被删除?听起来像是病毒扫描器的问题。 - tinman
1
Victor T. : 我刚刚遇到了权限被拒绝的问题。 tinman: 没有安装防病毒软件,我只是偶尔运行 McAfee Stinger。 今晚我会查看 UAC。 - Gissur Þórhallsson
1
你的 Code::Blocks 项目不应该创建在像 C、C://users//你的用户名、C://ProgramFiles 或 C://ProgramFiles/Code::Blocks 这样的目录中。 - 2147483647
显示剩余4条评论
12个回答

47

在关闭了一些(我认为是不必要的)Windows服务后,我遇到了完全相同的问题。事实证明,当我重新打开“应用程序体验”时,一切都恢复正常。

也许您只需要启用这项服务?要打开“应用程序体验”:

  1. 点击 Windows 开始按钮。

  2. 在标有“搜索程序和文件”的框中输入 services.msc 并单击搜索按钮。一个标题为“服务”的新窗口将打开。

  3. 右键单击“应用程序体验”行,并从弹出菜单中选择“属性”。

  4. 将“启动类型”更改为“自动(延迟启动)”。

  5. 重新启动计算机。

应用程序体验应该能够预防未来的问题。


3
这似乎是解决这个非常棘手问题的实际好方法。我在一些论坛帖子和类似的地方看到它没有被解决。 - Cimbali
对我也起作用了,但我仍然不明白发生了什么。 - 5agado
2
重启后得到了很好的答案,+1。 - Philip Rego
我正在尝试使用MSYS2/ming32构建软件包,但遇到了同样的问题。当configure脚本尝试编译测试程序时,我会遇到ld错误。 "应用体验"魔法没有起作用。 - Seppo Enarvi
1
在Windows 10中,可以通过以下步骤找到“应用程序体验”:
  1. 在开始菜单的搜索栏中键入“任务计划程序”,并从结果列表中选择它。
  2. 在其中,请在左侧窗格中选择“任务计划程序库”。
  3. 在那里选择“Microsoft”。
  4. 在Microsoft中,请选择“Windows”。
  5. 在Windows中,请选择“应用程序体验”。(来自此表格)
- Pro Q
显示剩余4条评论

29

您的程序仍在运行。您需要通过关闭命令行窗口来终止它。 如果按下Ctrl + Alt + Delete,打开任务管理器,选择进程(杀掉与您文件名匹配的进程)。


23

如果您认为可执行文件被某个进程锁定,可以尝试使用SysInternals的Process Explorer。在“文件/句柄”中输入Fibonacci.exe,您应该能够看到谁拥有该文件。

如果这还不够,您可以再次使用SysInternals的Process Monitor跟踪系统上所有进程对Fibonacci.exe的活动。 通过一些分析(调用堆栈),您可能会找出为什么无法访问该文件以及是什么使它消失。


我选择了你的答案,因为它看起来是根据我的问题陈述最可行的解决方案。不过,由于我运行它的机器崩溃了,所以我无法尝试它。既然我现在决定使用Linux,这对我来说有点无意义了。 - Gissur Þórhallsson

10

问题原因 : 当前程序的进程仍在运行,没有被中断。 (这就是为什么重启后您没有遇到此问题的原因)

解决方法很简单 : 打开cmd并输入命令taskkill -im process_name.exe -f

例如:

 taskkill -im demo.exe -f

这里,

demo-是我的程序名称


7
最好的解决方案是在Eclipse IDE中打开控制台,点击红色按钮来终止程序。你将会看到你的程序正在运行,输出结果可以在那里看到。 :) !!

这是最好的解决方案,每个使用 Eclipse 的人都应该使用它。 - shadrack Mwangi

4

我也遇到了同样的问题,通过以管理员身份运行Code::Blocks解决了这个问题。


3
  1. 打开任务管理器 -> 进程 -> 点击 .exe 文件 (Fibonacci.exe) -> 结束进程

    如果不行

  2. 关闭 Eclipse IDE (或者你使用的任何 IDE),并且重复步骤 1。


2

我遇到了同样的问题。阅读这篇文章。禁用了杀毒软件(mcaffee)。Et voila

杀毒软件日志确认:

被访问保护规则d:\mingw64\x86_64-w64-mingw32\bin\ld.exe d:\workspace\cpp\bar\foo.exe 用户定义规则:ctx3 操作被阻止 : 创建


2

可能是您的杀毒软件导致的问题。

在我的情况下,Malwarebytes占用了我的程序可执行文件的句柄:

enter image description here

使用Process Explorer关闭句柄或暂时禁用杀毒软件都可以解决问题。


【已解决】在我的情况下,是防病毒软件阻止了它。我打开了防病毒程序,发现它记录了一个事件,即ld.exe被阻止了。如果你只是添加ld.exe的例外,这个错误就会消失,无需禁用防病毒软件。 - Chandan

2

我曾经遇到过类似的问题。使用一个叫做Unlocker(版本1.9.2)的免费工具,我发现我的杀毒软件(Panda免费版)在执行文件上留下了一个挂起的锁,尽管它没有检测到任何威胁。Unlocker可以解除它。


谢谢,我通过关闭Symantec Endpoint Protection的文件系统自动保护功能成功解决了同样的问题。 - Seppo Enarvi

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