当前位置: 代码迷 >> 综合 >> MACBOOK 调教指北
  详细解决方案

MACBOOK 调教指北

热度:74   发布时间:2024-01-04 06:16:39.0

以下都是本人在使用macOS Mojave v10.14.6 实际遇到的问题:

1、切换到root用户

$sudo su
Password:?
sh-3.2# 

2、为系统自带的php安装pcntl扩展

$php -v
No log handling enabled - using stderr logging
Created directory: /var/db/net-snmp
Created directory: /var/db/net-snmp/mib_indexes
PHP 7.1.23 (cli) (built: Feb 22 2019 22:19:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
$curl -O https://www.php.net/distributions/php-7.1.23.tar.gz
$tar zxvf php-7.1.23.tar.gz
$cd php-7.1.23/ext/pcntl
$phpize
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:  

头文件一个都没有,解决方案,重新安装后即可。

$ xcode-select --install
$ cd /Library/Developer/CommandLineTools/Packages/
$ open macOS_SDK_headers_for_macOS_10.14.pkg

3 3、/usr/lib不可写问题,root都不行

# cp pcntl.so /usr/lib/php/extensions/no-debug-non-zts-20160303/
cp: /usr/lib/php/extensions/no-debug-non-zts-20160303/pcntl.so: Operation not permitted

因为 新的macOS 启用了 SIP (System Intergerity Protection)功能,导致 root 用户也没有权限修改。Rootless机制将成为对抗恶意程序的最后防线
禁用此项功能步骤如下:

  1. 重启电脑
  2. command + R 进入 recover 模式
  3. 点击最上方的菜单使用工具,选择终端
  4. 运行命令 csrutil disable
  5. 当出现 successfully 字样代表成功,重启电脑就可以了。
-bash-3.2# csrutil disable
Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.
-bash-3.2#

PS:如果需要重新开启这个 SIP 功能,重复上面布置,只是第四步的命令是 csrutil enable

4、 安装Brew并 修改为国内源

#安装
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
#换源
cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
# 替换homebrew-core.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
# 刷新源
brew update

5、升级到MacOS 10.15 Catalina后权限问题

为了能使用sidecar,第一时间升级了正式版的10.15,升级后发现workerman不能用了,提示PCNTL没有。检查后发现系统PHP升级到7.3.8了,重新下载源码包,重新编译吧,遇到一些10.14有区别的地方。
部分内容参考:macOS软件编译时找不到头文件解决方法[更新10.15]

$ csrutil status #确保SIP功能是关闭状态
$ xcode-select #安装开发工具文件头等
$ sudo mount -uw /	# 根目录挂载为可读写,否则无法在/usr/下建立文件,本修改重启前有效。
$ sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include include
$ sudo DevToolsSecurity -enable # 将系统置于开发模式
$ cd ~/Downloads/PHP-7.3.8/ext/pcntl #进入PHP源码包
$ phpize
$ ./configure
$ make && make install
$ sudo cp moudle/pcntl.so /usr/lib/php/extensions/no-debug-non-zts-20180731/
$ php -m #检查加载情况

我在加载根分区读写权限后,怎么也无法cp到/usr/lib,前后耽误了1天,后来才想起来,必须用sudo来执行,哭,白白浪费1天的时间。

  相关解决方案