"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
我尝试过的事情
使用 ls -leO
:
验证文件具有执行权限,并且没有阻止它 运行 的属性或标志
-rwxr-xr-x 1 monarch staff - 15212 Jan 1 13:51 a.out
从恢复 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
,并感谢其他人的建议。
背景
我创建了一个简单的 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
我尝试过的事情
使用
验证文件具有执行权限,并且没有阻止它 运行 的属性或标志ls -leO
:-rwxr-xr-x 1 monarch staff - 15212 Jan 1 13:51 a.out
从恢复 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
,并感谢其他人的建议。