PHP 7.4安装mongodb扩展失败:_ZSTD_compress符号未找到
错误原因
日志中的_ZSTD_compress符号缺失,说明mongodb扩展依赖的Zstandard(ZSTD)压缩库未被MAMP的PHP环境正确识别。核心问题分两种情况:
- MAMP的PHP环境未内置ZSTD库,编译mongodb扩展时自动链接了系统中的ZSTD,但加载时PHP进程找不到对应库文件;
- M1 Mac的arm64架构与MAMP PHP的架构(可能是x86_64)不匹配,导致编译扩展时使用的ZSTD库架构和PHP进程不一致,符号无法兼容。
解决办法
方法1:手动编译匹配架构的mongodb扩展
确认MAMP PHP的架构
执行命令查看:file /Applications/MAMP/bin/php/php7.4.33/bin/php输出若为
x86_64则是Intel架构版本,arm64则是原生M1版本。安装对应架构的ZSTD库
- 若为x86_64:用Rosetta终端(右键终端→显示简介→勾选「使用Rosetta打开」)执行:
arch -x86_64 brew install zstd - 若为arm64:直接执行:
brew install zstd
- 若为x86_64:用Rosetta终端(右键终端→显示简介→勾选「使用Rosetta打开」)执行:
重新编译mongodb扩展
先卸载已安装的扩展:pecl uninstall mongodb再指定ZSTD路径重新安装对应版本:
- x86_64架构:
arch -x86_64 pecl install mongodb-1.16.2 --with-zstd=$(brew --prefix zstd) - arm64架构:
pecl install mongodb-1.16.2 --with-zstd=$(brew --prefix zstd)
- x86_64架构:
验证生效
重启MAMP后,执行命令检查:/Applications/MAMP/bin/php/php7.4.33/bin/php -m | grep mongodb输出
mongodb即为成功,也可查看phpinfo确认。
方法2:替换预编译的兼容扩展
若编译操作繁琐,可直接使用匹配版本和架构的预编译mongodb.so:
- 确认PHP版本(7.4.33)、扩展目录(
/Applications/MAMP/bin/php/php7.4.33/lib/php/extensions/no-debug-non-zts-20190902/)及架构; - 获取对应预编译扩展包,替换原有
mongodb.so文件; - 重启MAMP服务器即可。
方法3:检查php.ini配置正确性
确保MAMP的php.ini已正确引用扩展:
- 打开MAMP→
Preferences→PHP→点击Open php.ini; - 确认存在配置项:
若路径识别异常,可改为绝对路径:extension=mongodb.soextension=/Applications/MAMP/bin/php/php7.4.33/lib/php/extensions/no-debug-non-zts-20190902/mongodb.so - 保存后重启MAMP。
内容的提问来源于stack exchange,提问作者ThinhDev
相关产品推荐
相关产品推荐

