[英]“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
從Recovery OS終端使用csrutil disable
禁用“系統完整性保護”,重新引導,重新編譯和運行a.out
。 結果相同的錯誤消息。
題
還有其他限制可能會阻止我在Mac OS X上編譯的二進制文件運行嗎?
弄清楚了。
我的代碼在加密的sparseimage上,該圖像上設置了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)
實際的sparseimage位於我的主文件夾中,名為work.sparseimage
。 我這樣刪除了隔離屬性:
$ xattr -d com.apple.quarantine work_personal.sparseimage
然后,我卸載(彈出)映像,然后重新裝入它,重新編譯該文件,並且執行該命令時沒有錯誤。
特別感謝@Mark Setchell在問題的評論中問我是否在驅動器上設置了noexec
,並感謝其他所有人的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.