macOS Monterey通过brew安装PHP后找不到sqlite3_enable_load_extension符号报错
问题解决步骤
错误根因
macOS Monterey 系统自带的 /usr/lib/libsqlite3.dylib 版本较低,未实现 _sqlite3_enable_load_extension 符号,而 brew 编译的 PHP 8.1 默认依赖更高版本的 sqlite 库,加载时优先匹配到系统低版本 sqlite 库就会触发该报错。
修复操作
第一步:修正PHP模块加载路径
首先检查 /private/etc/apache2/httpd.conf 中对应的LoadModule行,不要写死Cellar下带版本号的绝对路径,替换为brew官方给出的通用软链路径,避免后续PHP版本更新后路径失效:
把原配置:
LoadModule php_module /usr/local/Cellar/php/8.1.0/lib/httpd/modules/libphp.so
替换为:
LoadModule php_module /usr/local/opt/php/lib/httpd/modules/libphp.so
修改后先执行apachectl configtest验证是否恢复正常,如果仍报错继续执行下面的步骤。
第二步:重新编译PHP关联brew版sqlite
- 先安装brew源的高版本sqlite:
brew install sqlite - 从源码重新编译安装PHP,编译过程会自动链接brew安装的sqlite,避免依赖系统低版本库:
brew reinstall php --build-from-source - 编译完成后,重新对新生成的
libphp.so文件执行代码签名操作,原有签名会随文件更新失效。
验证
执行以下命令检查配置是否合法:apachectl configtest
返回Syntax OK即代表修复完成,执行sudo apachectl restart重启Apache即可生效。
内容的提问来源于stack exchange,提问作者xiao333ma
相关产品推荐
相关产品推荐

