构建PHP扩展时链接phpcpp失败 提示cannot find -lphpcpp
故障原因
/usr/bin/ld: cannot find -lphpcpp 属于链接阶段报错,本质是ld链接器在默认扫描的库路径里找不到PHP-CPP的库文件,和你修改INI_DIR的操作没有关系,按以下步骤逐一排查即可:
第一步:确认PHP-CPP本体已经完成编译安装
很多人只下载了PHP-CPP源码没执行编译安装,就直接去编译自定义扩展,先进PHP-CPP源码根目录执行以下命令:make clean make -j$(nproc) sudo make install默认安装逻辑会把
libphpcpp.so放到系统库目录,头文件放到系统include目录。注意PHP7.4必须用PHP-CPP的v2版本分支,v3版本只支持PHP8,版本下错即使编译成功也会出现兼容问题。第二步:定位库文件实际路径
如果执行完安装还是报错,直接全局搜索库文件位置:sudo find / -name "libphpcpp.so*"- 如果搜索无结果,说明PHP-CPP本体编译失败,回去看
make阶段的输出报错,优先检查Makefile里的PHP_CONFIG变量是否指向PHP7.4对应的php-config7.4路径,多PHP版本共存环境很容易因为这个变量指向错误导致编译失败。 - 如果搜索到文件,比如文件存放在
/usr/local/lib路径,说明链接器没扫描到这个路径,两种方案解决:- 临时修复:打开你自定义扩展的Makefile,在
LDFLAGS配置项末尾追加-L/usr/local/lib(替换为你搜索到的实际库目录路径),再重新make即可。 - 永久修复:把库路径加入系统链接器配置,执行:
执行完直接重新编译扩展即可,不需要改Makefile。echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/phpcpp.conf sudo ldconfig
- 临时修复:打开你自定义扩展的Makefile,在
- 如果搜索无结果,说明PHP-CPP本体编译失败,回去看
验证方式
扩展编译完成后,执行ldd 生成的扩展.so文件路径,如果输出里libphpcpp.so条目没有not found标识,就代表链接正常。
内容的提问来源于stack exchange,提问作者gearDev
相关产品推荐
相关产品推荐

