M1芯片MacOS Big Sur PHP8环境PDO_PGSQL扩展安装问题解决
M1芯片Mac OS Big Sur下PHP 8 PDO_PGSQL扩展加载失败解决方案
核心故障根因
dlopen(...): image not found的报错并非php.ini配置错误,是M1 ARM架构下Homebrew常规安装流程的兼容问题:要么是生成的pdo_pgsql扩展文件架构与当前PHP不匹配(混入了x86转译版本的文件),要么是扩展编译时未正确关联PostgreSQL客户端库路径,导致PHP启动加载阶段直接失败。就算php.ini里手动填了扩展开启项,实际加载流程在启动时就已中断,最终表现为Adminer检测不到PgSQL相关扩展、执行artisan命令时抛出动态库加载警告。
分步解决流程
- 架构一致性校验
- 执行
file $(which php)确认当前运行的PHP为原生ARM64架构,若输出显示x86_64,说明当前终端/PHP安装走了Rosetta转译路径,需退出转译终端后重新指向Homebrew原生路径的PHP - 执行
file /opt/homebrew/lib/php/pecl/20190902/pdo_pgsql.so确认对应扩展文件的架构,若输出为x86_64或文件不存在,直接删除对应失效的扩展文件,避免加载时的路径冲突
- 执行
- 依赖库前置准备
- 执行
brew install libpq安装原生ARM64版本的PostgreSQL客户端依赖 - 将libpq的环境变量追加到shell配置文件(
~/.zshrc):export PATH="/opt/homebrew/opt/libpq/bin:$PATH" export LDFLAGS="-L/opt/homebrew/opt/libpq/lib" export CPPFLAGS="-I/opt/homebrew/opt/libpq/include" - 执行
source ~/.zshrc让环境变量立即生效
- 执行
- 原生编译安装扩展
- 直接调用Homebrew路径下的PECL执行编译安装:
/opt/homebrew/bin/pecl install pdo_pgsql - 安装过程中提示输入pg_config路径时,填写
/opt/homebrew/opt/libpq/bin/pg_config - 注意:全程不要在Rosetta转译的终端窗口执行安装命令,否则会编译出x86架构的扩展文件,依然会触发image not found的加载错误
- 直接调用Homebrew路径下的PECL执行编译安装:
- 配置文件校验
- 检查php.ini中的扩展引用配置,使用纯扩展名而非绝对路径,确保配置项为:
extension=pgsql extension=pdo_pgsql - 若为Web服务场景,需单独核对PHP-FPM加载的php.ini路径与CLI路径是否一致,避免出现CLI端扩展正常、Web端未加载的情况,这也是Adminer检测不到扩展的常见诱因
- 检查php.ini中的扩展引用配置,使用纯扩展名而非绝对路径,确保配置项为:
- 功能验证
- 执行
php -m | grep -E "pgsql|pdo_pgsql",若输出中包含两个扩展模块,说明CLI端加载正常 - 重新执行
php artisan serve,确认启动阶段不再出现动态库加载警告 - 访问Adminer页面,验证PostgreSQL数据库连接功能是否正常
- 执行
内容的提问来源于stack exchange,提问作者Jinto Antony
相关产品推荐
相关产品推荐

