报错“cannot find php-config”是因configure未找到对应php版本的php-config文件,需确认当前激活版本、使用完整路径指定--with-php-config,并确保已安装对应开发包。

configure 报错 “Cannot find php-config” 是路径没对上
不是没装 php-config,是 ./configure 没找到它——常见于多版本 PHP 环境(如 phpEnv、宝塔、手动编译)中路径写错或根本没激活目标版本。
典型错误提示:configure: error: Cannot find php-config 或 php.h: No such file or directory。这两者本质是一回事:configure 脚本依赖 php-config 获取头文件路径、扩展目录、ABI 版本等信息,找不到就直接退出。
- 先确认当前 shell 激活的是哪个 PHP 版本:
phpenv version(phpEnv)或php -v(宝塔/自编译) - 再查
php-config是否存在且属于该版本:which php-config,输出必须和php -v显示的安装路径一致(例如/www/server/php/81/bin/php-config或~/.phpenv/versions/8.1.22/bin/php-config) - 如果
which php-config无输出,说明该版本未启用 pear/pecl 支持,或编译时漏了--with-pear;此时不能靠pecl install,得手动指定路径编译 - 运行
php-config --version和php-config --extension-dir,确保二者输出和php -v、php -i | grep extension_dir完全匹配
phpEnv 下最容易踩的坑:phpize 和 php-config 不是同一个版本
phpEnv 的 shims 机制会让 phpize 和 php-config 看似自动切换,但实际调用可能错位。比如你 phpenv shell 8.1.22,但 phpize 还是从系统 PATH 找到旧版的。
必须显式使用完整路径,不能只写 phpize:
-
~/.phpenv/versions/8.1.22/bin/phpize(注意是 bin 目录下,不是全局命令) -
./configure --with-php-config=~/.phpenv/versions/8.1.22/bin/php-config(路径必须和上面 phpize 同一目录) - 执行前先验证:
~/.phpenv/versions/8.1.22/bin/php-config --includes输出里要有php.h的真实路径,否则 configure 阶段就会因找不到头文件失败 - 如果
php-config --includes输出为空或报错,说明这个 PHP 实例本身没装开发包(如 Ubuntu 的php-dev、CentOS 的php-devel),得重装该版本 PHP 并带上 dev 依赖
云服务器/宝塔用户常误用 /usr/bin/php-config
很多教程抄来抄去写 --with-php-config=/usr/bin/php-config,但在宝塔或自编译环境下,这个路径几乎总是错的。宝塔的 PHP 81 实际在 /www/server/php/81/bin/php-config,自编译的可能在 /usr/local/php81/bin/php-config。
别猜,直接查:
-
php -r "echo PHP_BINDIR;"→ 得到二进制目录(如/www/server/php/81/bin) - 然后拼出完整路径:
/www/server/php/81/bin/php-config - 千万别把
php路径当php-config路径用 —— 错误示例:--with-php-config=/www/server/php/81/bin/php(这是可执行文件,不是配置工具) - 如果
php-config确实不存在,Ubuntu 用户运行sudo apt install php8.1-dev,CentOS 用户运行sudo yum install php81-php-devel(包名依发行版和 PHP 来源而异)
make 阶段报错 gcc 版本低,和 php-config 无关但常被混淆
看到 swoole_config.h:22:2: error: #error "GCC 4.8 or later required.",这不是 php-config 的问题,是编译器太老。但很多人在解决 “php-config not found” 时顺手升级了系统,结果卡在这里。
关键点在于:cc 命令是否指向合规版本:
- 运行
cc -v,看输出的 gcc 版本;即使你装了 gcc 11,若cc还链向系统默认的 4.4.7,make 就会失败 - 临时解法:
CC=/usr/bin/gcc-11 make(前提是已装新 gcc) - 永久解法:
sudo ln -sf /usr/bin/gcc-11 /usr/bin/cc,再验证cc -v - 这个步骤必须在
./configure之后、make之前做;configure 成功不代表 make 能过
真正难调试的,是 php-config 路径对了、gcc 也够新,但 make 仍挂掉——这时大概率是 OpenSSL 头文件缺失(evp.h 找不到),得单独装 libssl-dev 或指定 --with-openssl-dir。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











