"Operation not permitted" 运行 在 El Capitan 上使用/clang 编译的 hello world 二进制文件

"Operation not permitted" running hello world binary compiled w/ clang++ on El Capitan

背景

我创建了一个简单的 Hello World C++ 程序:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello World!" << endl;
    return 0;
}

并像这样用 clang++ 编译它(g++ 显然指向 OS X 上的 clang++):

g++ helloworld-cpp.cpp

这会生成一个可执行文件,a.out。 运行 它在提示符下导致 bash 抛出错误 Operation not permitted,如图:

$ ./a.out
-bash: ./a.out: Operation not permitted

我尝试过的事情

  1. 使用 ls -leO:

    验证文件具有执行权限,并且没有阻止它 运行 的属性或标志

    -rwxr-xr-x 1 monarch staff - 15212 Jan 1 13:51 a.out

  2. 从恢复 OS 终端使用 csrutil disable 禁用 "System Integrity Protection",重新启动,重新编译,然后 运行 a.out。产生相同的错误消息。

问题

是否有任何其他限制可以阻止我在 Mac OS X 上从 运行 编译二进制文件?

想通了。

我的代码在一个加密的稀疏图像上,它设置了 quarantined 属性。我像这样通过 运行 mount 检查了这个(参见 /Volumes/work 上的属性):

$ mount
/dev/disk0s2 on / (hfs, local, journaled)
/dev/disk2s2 on /Volumes/work (hfs, local, nodev, nosuid, journaled, noowners, quarantine, mounted by monarch)

实际的稀疏图像位于我的主文件夹中,标题为 work.sparseimage。我像这样删除了隔离属性:

$ xattr -d com.apple.quarantine work_personal.sparseimage

然后我卸载(弹出)图像,然后 re-mounted 它,重新编译文件并在没有错误的情况下执行。

特别感谢@Mark Setchell 在问题的评论中询问我是否在驱动器上设置了 noexec,并感谢其他人的建议。