借助本项目构建的依赖库,编译PHP其他版本--例子PHP7.4 ,PHP 8.20
Closed this issue · 33 comments
比如:php 7.4 、 php 8.20
第一步:运行已经构建好依赖库的容器:
这两个容器镜像都是一样的,区别是:容器镜像的生成过程不同
前者通过docker commit
生成
后者通过Dockerfile
分步构建生成
#!/bin/env sh
__DIR__=$(
cd "$(dirname "$0")"
pwd
)
image=phpswoole/swoole-cli-builder:1.6
image=registry.cn-beijing.aliyuncs.com/jingjingxyk-public/app:build-swoole-cli-build-dependencies-alpine-edge-20230226T074232Z
docker run --rm --name swoole-cli-build-dev-all-dependencies-container -d -v ${__DIR__}:/work -w /work $image tail -f /dev/null
第二步:静态编译PHP
这三个分支,选择自己需要的,他们之间变化并不大哈。自己修改PHP 版本就行
build_native_php
build_php_8.2
build_php_7.4
build_php_7.3 需要更换为GCC 、glibc
步骤也没变
php prepare.php
sh make.sh all_library
sh make.sh php_src # 这一步执行下载PHP 源码,并把需要的扩展的源码拷贝到 PHP源码目录
sh amke.sh config
sh make.sh build
sh make.sh archive
7.0、7.1这种低版本也可以吗?
@ikilobyte 当然可以了
@ikilobyte 是的,静态编译的依赖库已经构建好
docker exec -it swoole-cli-build-dev-all-dependencies-container sh
就可以进入容器了
其他脚本在这里:https://github.com/jingjingxyk/swoole-cli/tree/new_dev_build/build-tools/php-7
@jingjingxyk 有好几个脚本,需要执行哪几个?
这是步骤简述: crazywhalecc/static-php-cli#22 (comment)
这个容器相当于把第3、4步提前完成了
需要这些:
下载PHP源码和PHP扩展源码: https://github.com/jingjingxyk/swoole-cli/blob/new_dev_build/build-tools/php-7/download-sourcecode.sh
静态编译PHP 准备构建参数: https://github.com/jingjingxyk/swoole-cli/blob/new_dev_build/build-tools/php-7/build-config-php-7.sh
执行静态编译PHP: https://github.com/jingjingxyk/swoole-cli/blob/new_dev_build/build-tools/php-7/build-make-php-7.sh
嗯,执行build-config-php-7.sh
报错了,我需要的php版本是7.0.21(老项目),download-sourcecode.sh
执行成功了
checking whether to include code coverage symbols... no
checking whether to enable bc style precision math functions... yes
checking for BZip2 support... yes
checking for BZ2_bzerror in -lbz2... yes
checking whether to enable calendar conversion support... no
checking whether to enable ctype functions... yes
checking for cURL support... yes
checking for cURL in default path... not found
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
download-sourcecode.sh里面的也version
变量也改成了php-7.0.21
@ikilobyte
很好解决啊,除非此 PHP 版本本身就不支持,那就得降依赖库的版本 (降依赖库版本,或者升级依赖库版本,是需要重新静态依赖库的)
参考这里解决: package_names="readline icu-i18n icu-io icu-uc libpq libffi"
填上类似这个:
package_names="${package_names} libcurl"
有啥报错,就按照报错信息解决问题
刚验证了以下:7.0 和7.4 参数配置是有差异的。7.0 版本curl需要这样写--with-curl=/usr/curl
, 7.4 版本curl 是这样--with-curl
没有参数
调试,按照错误提示,修正就行
./configure --help | grep curl
@jingjingxyk 刚试了一下,7.0的大把报错,,根本用不了
@ikilobyte 我看了,并且尝试了,改改配置就能通过,不能通过的就只能降低依赖库版本
(这里脚本配置是可以通过编译的) https://github.com/jingjingxyk/swoole-cli/tree/new_dev_build/build-tools/php-7.0
自己修改这些配置
--with-openssl=/usr/openssl \
--with-curl=/usr/curl \
--enable-zip \
--with-libzip=/usr/libzip \
--enable-libxml \
--with-libxml-dir=/usr/libxml2 \
--with-xsl=/usr/libxslt/ \
--with-jpeg-dir=/usr/libjpeg \
--with-freetype-dir=/usr/freetype \
--with-webp-dir=/usr/libwebp \
--with-gd=/usr/
刚编译成功的 php-7.0.12 ,自己可以按照脚本编译
@ikilobyte 想用,得自己改 配置文件,以及降低扩展的版本,或者降低依赖库的版本
自己对比和7.4的区别
./configure --help | grep -e '--enable'
./configure --help | grep -e '--with'
./configure --help | grep curl
./configure --help | grep zip
./configure --help | grep libxml
./configure --help | grep gd
./configure --help | grep jpeg
./configure --help | grep freetype
./configure --help | grep webp
./configure --help | grep xslt
./configure --help | grep gd
./configure --help | grep openssl
./configure --help | grep yaml
你可以看下参数的区别就知道了。和7.4版本 参数差别很大的
大佬, macos能编译7.x版本吗?
@1307super 可以的哈 ! 比如我自个用的
这三个分支,选择自己需要的,他们之间变化并不大哈。自己修改PHP 版本就行
build_native_php
build_php_8.2
build_php_7.4
php prepare.php
sh make.sh all_library
sh make.sh php_src # 这一步执行下载PHP 源码,并把需要的扩展的源码拷贝到 PHP源码目录
sh amke.sh config
sh make.sh build
sh make.sh archive
php7.3-7.4 主要配置参数有变化: https://www.php.net/manual/zh/migration74.other-changes.php
也就是需要修改: conf.d 里面的配置
php 7.4 以前的版本 使用 gcc 编译
这三个分支,选择自己需要的,他们之间变化并不大哈。自己修改PHP 版本就行 build_native_php build_php_8.2 build_php_7.4
php prepare.php sh make.sh all_library sh make.sh php_src # 这一步执行下载PHP 源码,并把需要的扩展的源码拷贝到 PHP源码目录 sh amke.sh config sh make.sh build sh make.sh archive
在macos下:
使用sh make.sh all_library 的时候 libssh2报错:
./make.sh: line 758: -DCRYPTO_BACKEND=OpenSSL: command not found
openssl版本:
LibreSSL 2.8.3
大佬 这是啥问题呀? 我将-DCRYPTO_BACKEND=/xxx/.swoole-cli/openssl 也不行
@1307super
这是bug ,看这里 https://github.com/swoole/swoole-cli/pull/109/files ,等待和并分支
或者自己手动修复一下即可: https://github.com/swoole/swoole-cli/blob/main/conf.d/curl.php#L143
conf.d/curl.php 143 行, 多了一个换行符 144行少一个换行符
@1307super 这是bug ,看这里 https://github.com/swoole/swoole-cli/pull/109/files ,等待和并分支
或者自己手动修复一下即可: https://github.com/swoole/swoole-cli/blob/main/conf.d/curl.php#L143
conf.d/curl.php 143 行, 多了一个换行符 144行少一个换行符
感谢, 这一步跑完了, 走config的时候 最后出现
If configure fails try --with-xpm-dir=
configure: error: freetype-config not found.
我重新编译了freetype 还是不行噶
@1307super 你用的PHP那个版本? 那个分支? 你应该看下 freetype 是否编译成功(删除freetype 编译目录,重新编译看一下)
有问题慢慢调哈!
7.3 版本是需要自己安装gd2 库的 (这个我没调试)
libavif 和 libxmp 暂时都没有安装 (这两个库静态编译有点麻烦,还没有加入主版本)
噢噢, 用的是7.3的 我研究研究, 非常感谢~
libXpm 和 libavif 以及 libgd2 都不太好静态编译,主要这两个库还依赖其他库,暂时没有完全解决依赖库的静态编译问题
静态编译还没有解决
libxpm 静态库编译暂时没有解决: https://github.com/jingjingxyk/swoole-cli/blob/cd25c7f3336b9943f81cd275b9bd5dddd81bbb77/sapi/src/library_builder/library_install_builder_test.php#L656
libgd2 静态库编译暂时没有解决: https://github.com/jingjingxyk/swoole-cli/blob/cd25c7f3336b9943f81cd275b9bd5dddd81bbb77/sapi/src/library_builder/library_install_builder_test.php#L549
libavif 昨天(2023-04-04)刚解决: https://github.com/jingjingxyk/swoole-cli/blob/cd25c7f3336b9943f81cd275b9bd5dddd81bbb77/sapi/src/library_builder/library_install_builder_test.php#L319
@jingjingxyk 感谢~
@jingjingxyk
使用官网下载的mac版: swoole-cli-5.0.2, 执行composer的时候 会报错, 使用其他集成环境的php执行composer的时候正常, 请问一下您有遇到过吗?
@1307super 这个问题是个bug (#80 ),静态编译ICU 库时 ICU-DATA 没有设置静态编译 ,已经解决了
大佬没有更新已经发布的包
@1307super 这个问题是个bug (#80 ),静态编译ICU 库时 ICU-DATA 没有设置静态编译 ,已经解决了
大佬没有更新已经发布的包
噢噢~ 非常感谢
@1307super 这个问题是个bug (#80 ),静态编译ICU 库时 ICU-DATA 没有设置静态编译 ,已经解决了
大佬没有更新已经发布的包
大佬, 又来麻烦您了, 我拉了master的代码, 在另一个mac上编译的, 文档写的brew需写在的依赖都卸载了, 编译好的swoole-cli给到其他mac运行的时候, 都会提示, 已经编译了3次了噶... 都是这个问题, 能帮忙看看吗
@1307super
我擦,我忘了更新 macOS 下的文档了
这样解决
brew install gettext coreutils
伴随着个这个 PR 提交的 https://github.com/swoole/swoole-cli/pull/90/files#diff-3d3699e6402f81b8ec7d22543c4a9ed5b1849d2defba09337bc6c37bbd429331 可以看Dockerfile 增加项
libidn2 库 需要重新编译
@1307super 我擦,我忘了更新 macOS 下的文档了 这样解决
brew install gettext coreutils伴随着个这个 PR 提交的 https://github.com/swoole/swoole-cli/pull/90/files#diff-3d3699e6402f81b8ec7d22543c4a9ed5b1849d2defba09337bc6c37bbd429331 可以看Dockerfile 增加项
收到 非常感谢 ~ 我刚把brew安装的所有依赖给卸载了, 再来一次看看