首次执行时无法运行已编译的 C++ 程序

Posted

技术标签:

【中文标题】首次执行时无法运行已编译的 C++ 程序【英文标题】:Unable to run compiled C++ programs on first execution 【发布时间】:2020-08-26 19:12:37 【问题描述】:

自从升级到 Mac OS Catalina 后,每次编译 C++ 程序时,它都不会第一次运行。程序按预期编译,可执行文件已创建并且在所有方面看起来都很正常。但是,当我运行程序时,它会立即打印:

-bash: ./a.out: 输入/输出错误

立即再次运行该程序完全符合预期。下面是流程的屏幕截图和用于生成错误的简单程序。

#include <iostream>

int main ()

    std::cout << "test\n";
    return 0;

【问题讨论】:

不要放一张你用过的命令的图片。而是将它们复制/粘贴到问题中,以便其他人也可以复制/粘贴它们。你读过Got “input output error” when execute any commands吗? 阅读此unix.stackexchange.com/questions/542554/… 这个问题在这里不适用。问题不在于我不能从 CLI 运行程序,而只是我编译的 C++ 程序。如上所示,此问题仅在程序第一次执行时发生。第二次和随后的执行工作正常。 【参考方案1】:

经过几天的挖掘,我能够解决这个问题。问题是我的组织使用 Cylance 和高级威胁缓解工具。 Catalina 升级后,Cylance 在系统偏好设置中的安全设置下失去了其全盘访问权限。我授予了权限,并且能够获得解决问题的更新策略。

我跑了sudo dmesg 并注意到这条线:

hook_thread_userret 调用 CyProtectDrv.MemDef 错误

这似乎是一个潜在的问题。我搜索了那个字符串,发现第一个结果与 Cylance 相关。这就是让我走上这条非常具体的解决方案之路的原因。我希望这可以为其他人节省大量时间。

【讨论】:

【参考方案2】:

输入/输出错误可能是由于文件系统中的问题。如果您长时间使用过时的版本并且不需要可用的存储空间和 RAM,则可能会出现此问题。

尝试重新启动您的计算机。 如果这不起作用,请尽可能重新安装操作系统。

【讨论】:

我在文件系统上剩余超过 700GB,如前所述,程序的后续运行按需要运行。我尝试了几次重新启动以及使用不同的 C++ 编译器进行编译,但行为没有改变。

以上是关于首次执行时无法运行已编译的 C++ 程序的主要内容,如果未能解决你的问题,请参考以下文章

Sublime Text编译运行C++语言程序出现无法输入解决办法(WindowsLinuxMacOS均适用)

Sublime Text编译运行C++语言程序出现无法输入解决办法(WindowsLinuxMacOS均适用)

ejabberd 'make' 通过“无法运行已编译的 C 程序”

visual c++ 2012 应用程序无法在 windows xp 下运行 - 已更新

我无法在 Debian(Ubuntu) 中运行可在 Redhat(Centos) 中运行的 C++ 程序

netbeans c++程序无法运行