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

Posted

技术标签:

【中文标题】ld.exe:无法打开输出文件...:权限被拒绝【英文标题】:ld.exe: cannot open output file ... : Permission denied 【发布时间】:2011-12-01 02:41:50 【问题描述】:

我最近在 Windows 7 Ultimate 32bit 上安装了带有 mingw32 的 CodeBlocks,以便清理我的 c 技能,但这个问题让我有些难过。

我决定启动一个短斐波那契发生器以确保我的设置正常工作,但我遇到了障碍。

程序编译、链接和诸如此类的魅力,我得到了一个按预期运行的相应可执行文件。

如果我再次尝试编译会出现问题,然后我得到以下信息:

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 的了解并不多,不知道从哪里开始搜索。

有人有什么想法吗?

【问题讨论】:

这是一个总的猜测......如果你正在构建 bin\Debug 目录,那么 code::blocks 可能正在使用它的集成调试器做一些事情,保持可执行文件上的文件句柄打开。尝试构建它以发布,看看你是否有同样的问题 我认为@BrianGordon 的猜测不错。如果程序正在运行,请在尝试重建之前将其终止。 可执行文件消失了?因为它们会被自动删除?听起来像是病毒扫描程序的问题。 Victor T. : 我只是得到 Permission denied tinman: 没有安装防病毒软件,我只是偶尔运行 mcafee 毒刺。我今晚要去看看UAC。 不应在 C、C://users//yourname 或 C://ProgramFiles 或 C://ProgramFiles/Code::Blocks 等目录中创建您的 Code::Blocks 项目。 【参考方案1】:

问题原因: 当前程序的进程仍在运行,没有中断。 (这就是你重启后没有这个问题的原因)

解决方法很简单: 转到 cmd 并键入命令 taskkill -im process_name.exe -f

例如:

 taskkill -im demo.exe -f

这里,

demo - 是我的程序名

【讨论】:

【参考方案2】:

我遇到了类似的问题。 Bitdefender 自动隔离了我由 MinGW g++ 创建的每个 exe 文件。我找到了一个扩展名为“qzquar”的文件,而不是完整的 exe 文件 testAutoPtr1.exe.48352.gzquar

当我在 Bitdefender 中打开隔离项目时,我发现我的 exe 文件被隔离在那里。

【讨论】:

【参考方案3】:

在关闭一些(我认为不必要的)Windows 服务后,我遇到了完全相同的问题。事实证明,当我再次打开 "Application Experience" 时,一切恢复正常。

您可能只需要打开此服务吗?打开应用程序体验:

    单击 Windows 开始按钮。

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

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

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

    重启电脑。

应用程序体验应该可以防止将来出现问题。

【讨论】:

这似乎是解决这个非常讨厌的问题的真正好方法。我在一些论坛帖子等上看到它没有解决。 也为我工作,但我仍然不明白发生了什么。 重启到+1后得到了很好的回答 也为我工作,无法解释。 我正在尝试用 MSYS2/ming32 构建一个软件包并遇到同样的问题。当配置脚本尝试编译测试程序时出现 ld 错误。 “应用程序体验”魔法不起作用。【参考方案4】:

在 C++ 中使用 Atom 编辑器和 mingw(通过名为 gpp-compiler 的包)时出现此错误。关闭打开的控制台窗口解决了我的问题。

【讨论】:

【参考方案5】:

可能是你的杀毒软件。

就我而言,Malwarebytes 持有我程序可执行文件的句柄:

使用进程资源管理器关闭句柄,或者只是禁用杀毒软件就可以了。

【讨论】:

[已解决]在我的情况下,是防病毒软件阻止了它。我打开了防病毒程序,它记录了一个 ld.exe 被阻止的事件。如果您只是将异常添加到 ld.exe,此错误就会消失,无需禁用 Antivirus。【参考方案6】:

遇到同样的问题。阅读this。禁用防病毒软件 (mcaffee)。等等

由防病毒日志确认:

Blocked by Access Protection rule d:\mingw64\x86_64-w64-mingw32\bin\ld.exe d:\workspace\cpp\bar\foo.exe User-defined Rules:ctx3 Action blocked : Create

【讨论】:

【参考方案7】:

我遇到了类似的问题。使用名为 Unlocker(版本 1.9.2)的免费软件实用程序,我发现我的防病毒软件(Panda 免费版)在可执行文件上留下了挂锁,即使它没有检测到任何威胁。 Unlocker 能够将其解锁。

【讨论】:

谢谢,我可以通过从 Symantec Endpoint Protection 关闭文件系统自动防护来解决同样的问题。【参考方案8】:

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

    如果它不起作用

    关闭 eclipse IDE(或您使用的任何 IDE)并重复步骤 1。

【讨论】:

【参考方案9】:

最好的解决办法是在eclipse IDE中进入控制台,点击红色按钮来终止程序。 您将看到您的程序正在运行,并且可以在那里看到输出。 :) !!

【讨论】:

这是最好的解决方案,每个使用eclipse的人都应该使用这个。【参考方案10】:

我有同样的行为,并通过以管理员身份运行 Code::Blocks 来修复它。

【讨论】:

【参考方案11】:

您的程序仍在运行。您必须通过关闭命令行窗口来杀死它。 如果您按控制 alt 删除,任务管理器,进程(杀死与您的文件名匹配的那些)。

【讨论】:

正确答案...在这里真的很有帮助。【参考方案12】:

如果您认为可执行文件被进程锁定,请尝试 SysInternals 的 Process Explorer。在文件/句柄中,输入 Fibonacci.exe,您应该会看到谁拥有该文件。

如果还不够,您可以使用进程监视器(同样来自 SysInternals)来跟踪系统上所有进程在 Fibonacci.exe 上的活动。 通过一些分析(调用堆栈),您可能会发现对文件的访问被拒绝的原因以及导致文件消失的原因。

【讨论】:

我选择了您的答案,因为它看起来是考虑到我的问题陈述的最合理的解决方案。但我无法尝试,因为我运行它的机器崩溃了。因为我现在决定使用 linux,所以这对我来说是一个有争议的问题。

以上是关于ld.exe:无法打开输出文件...:权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

无法打开流或文件:无法打开流:权限被拒绝[重复]

无法打开流或文件:无法打开流:权限被拒绝

“无法打开流或文件“laravel.log”:无法打开流:权限被拒绝”

权限被拒绝,无法打开静态文件,Docker,Django

我收到错误日志文件的消息“无法打开流或文件“.../laravel.log”:无法打开流:权限被拒绝” [重复]

错误:无法打开文件进行阅读:权限被拒绝。 SQL 状态:42501