静态编译 PHP 8 系列、PHP7.4 、PHP7.3

静态编译PHP运行时

文档说明: 只记录关键的地方; 发布时间: 2023-08-07
环境: alpine:3.17 docker clang
状态: 已完成
备注:

macos 环境下不需要启动容器环境,直接构建即可 (支持 macos 环境下构建)

PHP 原生构建选项文档

php 7.4 、7.3 分支需要单独克隆 ( 区别: openss 使用 v1 版本, curl 库 不启用http2库 http3库 )

复用 swoole-cli 编写好的静态依赖库 和 编译流程

构建步骤:


git clone -b build_native_php https://github.com/swoole/swoole-cli.git
cd swoole-cli 

# 启用 alpine:3.17 容器环境 (docker pull alpine:3.17) 
bash sapi/quickstart/linux/run-alpine-container.sh

# 进入容器
bash sapi/quickstart/linux/connection-swoole-cli-alpine.sh

# 准备基础运行环境
sh  sapi/quickstart/linux/alpine-init.sh --mirror china 

# 准备PHP 运行时 (看提示,把 PHP 运行时导入环境变量PATH )
sh setup-php-runtime.sh  --mirror china

# 生成构建脚本 (这一步最好准备代理)
composer update
 php prepare.php  +inotify +apcu +ds +xlswriter +ssh2 +pgsql +pdo_pgsql \
--with-swoole-pgsql=1  --with-libavif=1  \
--with-php-version=8.1.20 \
--with-build-type=release \
--with-http-proxy=http://192.168.3.26:8015 \
--with-c-compiler=clang \
--with-install-library-cached=1 


# 静态编译  编译依赖库(生成静态依赖库)
bash make.sh  all-library 

# 静态编译 PHP 预处理
bash make.sh config 

# 静态编译PHP (编译、汇编、链接)
bash make.sh build 

# 静态编译PHP (打包)
bash make.sh archive 

更换 PHP 版本

# php 8.2.7
--with-php-version=8.2.7 

# php 8.1.21
--with-php-version=8.1.21

# php 7.4.33
--with-php-version=7.4.33

构建php7.4 7.3 版本需要特别处理之处(更换分支即可)

php 7.4 、7.3 分支需要单独克隆

( 区别: openss 使用 v1 版本, curl 库 不启用http2库 http3库 ,GD 库因libXpm编译失败,默认未启用)

除了更换分支,构建步骤仍然如上

# php 7.4 
git clone -b build_php_7.4  https://github.com/jingjingxyk/swoole-cli/

# php 7.3 
 git clone -b build_php_7.3  https://github.com/jingjingxyk/swoole-cli/

复用已经编译好的依赖库

(把构建好的依赖库打包到容器中,就可以分发了,缩减构建时间)

构建好的依赖库打包进入容器原理


bash sapi/quickstart/linux/run-alpine-container.sh
# 把构建步骤中这一步变更为:
bash sapi/quickstart/linux/run-alpine-container-full.sh


生成扩展依赖图


# 生成 ext-dependency-graph.graphviz.dot 文件

 php prepare.php  +inotify +apcu +ds +xlswriter +ssh2 +pgsql +pdo_pgsql \
--with-swoole-pgsql=1  --with-libavif=1 \
--with-dependency-graph=1 
--with-skip-download=1 --without-docker=1 \

# 生成PDF 、svg 、webp 格式的文件
sh sapi/extension-dependency-graph/generate-dependency-graph.sh

# 生成的依赖图文件位于
bin/ext-dependency-graph.pdf
bin/ext-dependency-graph.svg
bin/ext-dependency-graph.webp

体验构建结果

PHP-CLI

参考文档

  1. PHP 原生构建选项文档
  2. swoole-cli
  3. 静态编译PHP 运行时
  4. 静态编译PHP 运行时构建 实践
  5. swoole-cli编译步骤 main 分支
  6. swoole-cli 添加扩展 模板例子、静态库构建模板例子
  7. swoole-cli编译步骤 main 分支
  8. 添加扩展例子模板源文件
  9. 添加静态链接库模板源文件
  10. 从 PHP 7.4.x 升级到到 PHP 8.0.x 变更

复用 swoole-ci 编译流程,实现如下软件的静态编译

  1. ffmpeg 静态编译
  2. nginx 静态编译
  3. opencv 静态编译
  4. coturn 静态编译
posted @ 2023-08-07 12:05  jingjingxyk  阅读(462)  评论(0编辑  收藏  举报