拓展编译卡在make阶段通常是并行构建阻塞或依赖缺失,应改用make -j1单线程编译,并确保phpize、php-config、php.ini和php -v指向同一php版本。
拓展编译卡在 make 阶段不动,大概率是并行构建阻塞或依赖缺失
不是死机,而是 make 默认启用多线程(如 -j4),遇到某些 PHP 拓展(比如 redis、swoole 或自定义源码)在链接或生成中间文件时因资源竞争/顺序依赖卡住。常见现象是光标静止、CPU 占用低、无报错输出。
- 先按
Ctrl+Z暂停当前进程,再执行kill %1彻底终止 - 改用单线程编译:
make -j1(注意是数字 1,不是小写 L) - 确保已安装基础构建工具:
gcc、make、autoconf、automake、libtool(Ubuntu/Debian 上用apt install build-essential autoconf automake libtool) - 检查
phpize输出是否正常——如果连phpize都报错(如Cannot find config.m4),说明拓展源码不完整或目录结构不对
phpize 找不到或报错 Cannot find php-config
phpize 是生成 configure 脚本的关键工具,它依赖同版本的 php-config。如果你装了多个 PHP 版本(如系统自带 PHP + 自编译 PHP + phpbrew),phpize 往往指向错误的 php-config。
- 运行
which phpize和phpize --version确认它属于目标 PHP 版本 - 手动指定配置路径:
phpize --with-php-config=/path/to/your/php/bin/php-config(例如/usr/local/php/bin/php-config) - 若提示
php-config不存在,说明 PHP 编译时没启用--enable-embed或没安装php-dev包(Ubuntu/Debian:安装php-dev;CentOS/RHEL:安装php-devel)
configure 成功但 make 报错找不到头文件(如 php.h、zend.h)
这说明 phpize 生成的 configure 脚本没能正确识别 PHP 源码或头文件位置,尤其常见于从包管理器安装的 PHP(头文件被分到 php-dev 包里,但未被自动发现)。