如何在Linux(WSL2 Ubuntu22.04)下使PHP8的parallel扩展正常工作?
问题:PHP8 ZTS版本无法加载parallel扩展,导致1BRC脚本运行失败
环境
- Windows11主机 + WSL2 Ubuntu22.04
- 目标:编译带ZTS的PHP8并安装parallel扩展,运行1BRC的PHP实现
已执行操作
- 适配PHP7教程的配置,将
--enable-maintainer-zts替换为--enable-zts,使用指定脚本编译PHP(返回0退出码) - 手动安装了ext-parallel扩展
触发的错误
- 运行1BRC命令
phpz -d extension=parallel calculateAverage.php 4时的致命错误:
Fatal error: Uncaught Error: Class "parallel\Runtime" not found in /home/helitonmrf/projects/1brc/php_realFlowControl/calculateAverage.php:102 Stack trace: #0 {main} thrown in /home/helitonmrf/projects/1brc/php_realFlowControl/calculateAverage.php on line 102
- PHP启动时的扩展加载警告:
PHP Warning: PHP Startup: Unable to load dynamic library 'parallel' (tried: /etc/php8z/lib/php/extensions/no-debug-zts-20230831/parallel (/etc/php8z/lib/php/extensions/no-debug-zts-20230831/parallel: cannot open shared object file: No such file or directory), /etc/php8z/lib/php/extensions/no-debug-zts-20230831/parallel.so (/etc/php8z/lib/php/extensions/no-debug-zts-20230831/parallel.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library 'parallel' (tried: /etc/php8z/lib/php/extensions/no-debug-zts-20230831/parallel (/etc/php8z/lib/php/extensions/no-debug-zts-20230831/parallel: cannot open shared object file: No such file or directory), /etc/php8z/lib/php/extensions/no-debug-zts-20230831/parallel.so (/etc/php8z/lib/php/extensions/no-debug-zts-20230831/parallel.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
解决办法
1. 定位编译好的parallel.so文件
编译ext-parallel后,扩展源码目录的modules文件夹下会生成parallel.so,用以下命令查找:
find /your/ext-parallel-source-dir -name "parallel.so"
2. 复制扩展到PHP指定目录
根据警告中的路径,将parallel.so复制到PHP期望的扩展目录:
cp /found/path/parallel.so /etc/php8z/lib/php/extensions/no-debug-zts-20230831/
3. 配置PHP加载扩展
找到phpz对应的php.ini文件(执行phpz -i | grep php.ini获取路径),打开后添加一行:
extension=parallel.so
4. 验证扩展加载状态
执行以下命令检查扩展是否成功加载:
phpz -m | grep parallel
若输出parallel,说明扩展加载生效。
5. 重新运行1BRC脚本
再次执行命令:
phpz -d extension=parallel calculateAverage.php 4
额外排查点
- 确认PHP为ZTS版本:执行
phpz -i | grep "Thread Safety",输出需为enabled - 匹配编译版本:确保
phpize --version与phpz -v的版本号一致 - 编译ext-parallel时指定正确配置:在扩展目录执行
./configure --with-php-config=$(which phpz-config)
内容的提问来源于stack exchange,提问作者Heliton Martins
相关产品推荐
相关产品推荐

