首次执行时无法运行已编译的 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 下运行 - 已更新