静态编译PHP 运行时
静态编译PHP运行时
编译步骤这样划分:
- 下载指定版本PHP源码
- 下载对应版本的扩展
- 下载扩展对应版本的依赖库
- 静态编译扩展依赖库
- 静态编译之前,准备工作
- 修改相应参数
- 执行编译
- 执行构建
- 打包
不同操作系统,不同cpu架构,都执行一遍上面的流程。
linux macos window + CPU arch
MacOS, Windows, Linux x86/x86_64/arm/aarch64/mips/mipsel
快速进入编译环节(跳过安装依赖库环节,借助容器,使用提前编译好依赖库)
#!/bin/bash
__DIR__=$(
cd "$(dirname "$0")"
pwd
)
# default_image=jingjingxyk/build-swoole-cli:build-dependencies-alpine-edge-20230226T074232Z
default_image=registry.cn-beijing.aliyuncs.com/jingjingxyk-public/app:build-swoole-cli-build-dependencies-alpine-edge-20230226T074232Z
image=$default_image
docker run --rm --name swoole-cli-build-dev-all-dependencies-container -d -v ${__DIR__}:/work -w /work $image tail -f /dev/null
编译脚本
- download-php-sourcecode-7.sh
- build-config-php-7.sh
- build-make-php-7.sh
- download-php-sourcecode-8.sh
- build-config-php-8.sh
- build-make-php-8.sh
下载已经编译好的PHP运行时
编译静态PHP 解析器 参考文档
- crazywhalecc/static-php-cl
- dixyes/lwmbs
- lihq1403/lwmbs-build
- swoole/swoole-cli
- phpbrew/phpbrew.
- php/php-src
- jingjingxyk/swoole-cli
- postgresql静态编译libpq
- alpine c-ares-static 依赖问题
- PHP四种运行模式
参考文档
- Swoole-Cli 5.0.1:PHP 的二进制发行版
- Swoole v5.0 版本新特性预览之新的运行模式
- Swoole-Cli 5.0.1 使用说明
- swoole wiki
- 关于 PHP 8.1 的 Fiber RFC 用户真正需要的是一种完整的、系统性、成体系、简单易用、可靠的一整套技术方案
- php常见的四种运行模式
- 异步 I/O 框架 io_uring
- 零拷贝(Zero-Copy)
- 使用socket so_reuseport提高服务端性能
- IO多路复用之select、poll、epoll的区别
- 高并发下如何保证接口的幂等性
- 一文理解如何实现接口的幂等性
- 一文搞懂分布式锁的原理与实现
- 领域驱动设计(DDD:Domain-Driven Design)
- Libevent、libev、libuv三个网络库 对比,都是c语言实现的异步事件库
实践代码
- swoole-cli CI
- build-config-php-8.sh
- jingjingxyk/swoole-cli 编译PDO_PGSQL扩展
- 编译相关实验
- 准备环境1 下载源代码并生成构建脚本
- 准备环境2 构建环境