Mac Silicon M1 编译安装 PHP8 & Swoole4.6 ARM64 全过程记录

本文详细记录了在Mac Silicon M1上编译安装PHP8和Swoole4.6的全过程,包括解决/usr/lib写入权限问题,编译安装openssl、iconv、oniguruma等依赖,以及在遇到错误时的处理方法,旨在帮助开发者避免踩坑。

最近搞了一台 M1 的 Mac mini 准备用这个开发 mixphp v3 版本,之前尝试了几次没有编译成功,今天再次尝试安装成功了,网络上很多人的文章存在问题(可能是系统环境不同),特此分享让后续的人闭坑。

面临的问题

由于最新版本的 macOS Big Sur 即便关闭安全模式 /usr/lib 也无法写入文件,因此导致 make install 无法安装任何 php 扩展,因此想装 Swoole 只能自行编译安装 php 到 /usr/local 目录

% csrutil status
System Integrity Protection status: disabled.
% mkdir /usr/lib/php/extensions/test
mkdir: /usr/lib/php/extensions/test: Read-only file system

PHP Build

由于 brew arm64 版本无法使用,只能采用 x64 版本安装了一些依赖,后面导致了很多问题,本想编译一个 x64 PHP+Swoole 在编译 x64 Swoole 的时候异常就没有继续了,转而研究 arm64 PHP+Swoole

arch -x86_64 brew install openssl zlib curl libjpeg libpng libxml2 gettext freetype pcre libiconv libzip

参数中的路径都需要根据自己电脑所安装的实际路径替换

./configure --prefix=/usr/local/php8.0.7 --with-config-file-path=/usr/local/php8.0.7/etc --with-config-file-scan-dir=/usr/local/php8.0.7/etc/php.d
### 关于 Swoole Loader 在 arm64 架构下适配 PHP 7.0 的分析 目前,Swoole 官方并未明确提及针对 arm64 架构下的 PHP 7.0 提供原生支持的情况[^2]。然而,在实际开发环境中,许多开发者尝试通过手动编译或其他方式实现兼容性。 #### 手动编译的可能性 对于 arm64 架构上的 PHP 7.0 和 Swoole Loader 的兼容性问题,可以考虑以下方法: 1. **环境准备** 需要先确保基础依赖已正确安装。例如 OpenSSL、zlib、curl 等库的支持,这些可以通过 Homebrew 或其他包管理器完成。如果遇到 x64 版本冲突,则需切换至 arm64 支持的版本[^1]。 ```bash arch -arm64 brew install openssl@1.1 zlib curl libjpeg libpng libxml2 gettext freetype pcre libiconv libzip ``` 2. **PHP 源码编译** 对于 arm64 上的 PHP 7.0,建议从源码开始编译指定目标架构为 `--build=arm-apple-darwin`。以下是基本命令示例: ```bash ./configure --prefix=/usr/local/php7 \ --with-config-file-path=/etc/php/7.0/cli \ --enable-mbstring \ --enable-pcntl \ --enable-sockets \ --enable-bcmath \ --enable-calendar \ --enable-exif \ --enable-sysvmsg \ --enable-sysvsem \ --enable-sysvshm \ --enable-wddx \ --with-curl \ --with-iconv \ --with-zlib \ --with-libxml-dir \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-freetype-dir \ --with-gettext \ --with-xsl \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --disable-debug \ --disable-rpath \ CC="gcc -arch arm64" make && sudo make install ``` 3. **Swoole 扩展编译** 编译完成后,可进一步尝试编译 Swoole 扩展以适应当前 PHP 环境。需要注意的是,Swoole 自身可能未完全优化对 arm64 的支持,因此需要确认其最新版本是否已经修复相关问题[^2]。 ```bash pecl install swoole echo "extension=swoole.so" >> /etc/php/7.0/cli/php.ini php -m | grep swoole ``` #### 已知挑战与潜在风险 尽管理论上可行,但在实践中可能会面临如下困难: - **缺乏官方支持**:截至最近更新,Swoole 并未正式宣布全面支持 arm64 下的 PHP 7.0[^2]。 - **依赖项不一致**:某些底层库可能存在版本差异或缺失,导致编译失败。 - **性能瓶颈**:即使成功运行,也可能因硬件特性而导致性能下降。 #### 替代方案 如果上述路径难以实施,还可以探索以下替代策略: - 升级至更高版本的 PHP(如 PHP 7.2 或以上),因为较新的版本通常具备更好的跨平台兼容性和社区支持。 - 利用 Docker 容器化技术部署预构建镜像,从而绕过本地编译复杂度。 ```dockerfile FROM arm64v8/ubuntu:latest RUN apt update && apt upgrade -y && \ apt install -y software-properties-common && \ add-apt-repository ppa:ondrej/php && \ apt update && \ apt install -y php7.0-cli php7.0-mysql php7.0-json php7.0-opcache php7.0-intl php7.0-mbstring php7.0-soap php7.0-xml php7.0-zip git unzip wget build-essential autoconf automake pkg-config re2c bison libtool flex cmake python3-dev libssl-dev libpcre3-dev libevent-dev libncurses5-dev libreadline-dev libsqlite3-dev libbz2-dev libgmp-dev libicu-dev libmcrypt-dev libonig-dev libpspell-dev librecode-dev libtidy-dev libxml2-dev libxslt1-dev libzip-dev WORKDIR /app COPY . . CMD ["php", "-a"] ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值