Mac OS如何關閉內核保護?
我們在mac上做php開發時,需要自己去編譯一些php擴展,通常的步驟可能如下:
在make階段我們很有可能會碰到以下錯誤:
grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
出現上面錯誤的原因是因為,mac下編譯所用到的一些頭文件並不在/usr/include下,而是存在於路徑:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/php,這時我們處理此問題的方法有2種:
完成上面步驟後,再make,發現可以正常編譯。
然後make install,發現又有新的錯誤:
/usr/lib/php/extensions/no-debug-non-zts-20121212/#INST@870#: Permi-sion denied
然後我們嘗試手動複製編譯好的擴展xxyy.so到/usr/lib/php/extensions/no-debug-non-zts-20121212目錄下,還是會提示許可權不足,即使sudo成root操作也沒有用。導致此問題的原因是新版本到MAC OS新添加了一個新的安全機制叫系統完整性保護,對於以下目錄安全性保護,僅能對系統使用。因此我們在這些目錄中就無法做創建、刪除、編輯等操作,這些目錄包含:
我們所要安裝的php擴展剛好包含在這些目錄下,因此就有了上面的「Permi-sion denied」錯誤,好在mac提供了關閉內核保護機制,方法如下:
完成以上步驟後再cp xxyy.so
擴展安裝完成後,我們恢復內核保護,還是之行上面步驟,把步驟4到命令換成「csrutil enable」即可
TAG:全球大搜羅 |