Closed mmmcatoo closed 2 years ago
具体遇到了什么困难吗
下载了https://pecl.php.net/package/event这个扩展的3.0.6的版本。 解压到ext目录之后使用
./buildconf --force
./configuration --with-event-core
最后会报一个
checking PHP version... configure: error: unknown source
event扩展完全不支持in-tree构建, 我提了个PR 你可以用我这分支的源码
除此之外 你需要静态构建它的依赖libevent并且连接到最终的二进制中:
make EXTRA_LIBS='/path/to/libevent.a /path/to/libevent_extra.a ... -lrt -ldl -lpthread -lm ...'
如果没有关于构建micro(而不是event)的其他问题的话,请移步event的pr讨论并关闭这个issue
不加EXTRA_LIBS编译成功了
是这样的 你需要先构建libevent的静态库们,再在EXTRA_LIBS里指定,如果不这么做,构建出的micro/cli将会有对libevent的依赖。
操作步骤(未验证,仅供参考):
保存到任意路径,以/path/to/cmaketoolfile为例
SET(CMAKE_SYSTEM_NAME Linux)
# 设置目标架构
SET(CMAKE_SYSTEM_PROCESSOR aarch64)
# 设置交叉编译的c/cxx编译器
SET(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
# 设置cflags
SET(CMAKE_C_FLAGS "")
SET(CMAKE_CXX_FLAGS "")
# 设置cmake寻找库的根目录
SET(CMAKE_FIND_ROOT_PATH "/path/to/inst")
以/path/to/inst为安装路径为例,方括号部分可选(下同)
# 获取libevent源码
git clone https://github.com/libevent/libevent
pushd libevent
mkdir build
pushd build
# 使用cmake配置
cmake .. \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=/path/to/cmaketoolfile
# 使用cmake构建
cmake --build [-j `nproc`]
# 安装到/path/to/inst
make install DESTDIR=/path/to/inst
popd
popd
准备下源码先,如果需要纯静态的micro,就使用下面例子里的=all-static
参数
git clone https://github.com/php/php-src
pushd php-src
# 准备 micro,见readme
git clone <url for this repo> sapi/micro
# 准备event
git clone <url for event> ext/event
./buildconf --force
./configure \
--disable-all \
--disable-cgi \
--disable-cli \
--disable-phpdbg \
--enable-micro[=all-static] \
--with-event-core \
--with-event-libevent-dir=/path/to/inst \
--your-other-options...
这个时候打开Makefile看看它的EXTRA_LIBS里有啥,需要重新组装:
重复的库只保留最后一次出现
最后保持顺序不变,重新组装成EXTRA_LIB变量:
例如(为了方便加了换行)
-levent
-levent_openssl
-lz
-lcurl
-lz
-lssl
-lcrypto
-lz
-ldl
-lpthread
将会变成
/path/to/inst/lib/libevent.a
/path/to/inst/lib/libevent_openssl.a
/path/to/inst/lib/libcurl.a
/path/to/inst/lib/libssl.a
/path/to/inst/lib/libcrypto.a
/path/to/inst/lib/zlib.a
-ld
-lpthread
最后使用重新组装的EXTRA_LIBS构建micro(cli同理,把configure中的--disable-cli --enable-micro
换成cli就行)
make EXTRA_LIBS='/path/to/inst/lib/libevent_xxx.a...' [-j`nproc`] micro
当然 这个操作过于麻烦了
我已经在撸自动的构建系统了,只不过还要一段时间, 目前新构建系统里构建脚本部分整好了,有带swow curl openssl parallel redis ffi的版本的二进制(测试过程中的产物,每天更新):https://github.com/dixyes/lwmbs/actions/runs/2388707128
swoole event等其他异步IO引擎的版本还在TODO中
希望大佬早日成功
想咨询下PHP8.x的情况下如何编译event扩展