MacBook M1下XAMPP对接SQL Server运行Laravel项目扩展加载报错
解决M1芯片Mac下XAMPP/MAMP PRO加载sqlsrv扩展报错问题
根本原因
该报错核心是架构不匹配+缺少依赖:
- 你安装的
sqlsrv.so/pdo_sqlsrv.so扩展架构和XAMPP自带PHP的架构不统一(一方是Arm64原生、另一方是Intel转译) - 缺少微软官方的SQL Server ODBC驱动,扩展无法调用底层接口,所以抛出
_SQLAllocHandle符号找不到的错误
解决步骤
第一步:确认运行环境架构统一
右键访达中XAMPP.app(或MAMP PRO.app),点击「显示简介」,确认「使用Rosetta打开」选项的勾选状态:- 要使用原生Arm64环境:取消勾选,且确保你安装的是官方提供的Apple Silicon版XAMPP/MAMP PRO安装包
- 要使用Intel转译环境(兼容性更好):勾选该选项,安装Intel版XAMPP/MAMP PRO安装包
全程保持架构选择统一,不要中途切换。
第二步:安装对应架构的SQL Server ODBC依赖
打开终端执行对应命令:- 原生Arm64环境:
/opt/homebrew/bin/brew install microsoft/mssql-release/msodbcsql17 - Intel转译环境:
/usr/local/bin/brew install microsoft/mssql-release/msodbcsql17
- 原生Arm64环境:
第三步:编译适配当前PHP环境的sqlsrv扩展
不要直接用pecl安装默认扩展,要使用XAMPP/MAMP自带的php编译工具生成适配扩展:- 下载和你当前PHP版本匹配的
sqlsrv、pdo_sqlsrv源码包 - 解压
sqlsrv源码包,进入目录依次执行:/Applications/XAMPP/xamppfiles/bin/phpize ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config make && make install - 解压
pdo_sqlsrv源码包,进入目录重复执行上一步的三条命令 - 确认生成的
sqlsrv.so、pdo_sqlsrv.so文件已被自动复制到php.ini中指定的扩展目录(即你报错信息中显示的/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20200930/路径)
- 下载和你当前PHP版本匹配的
第四步:验证生效
终端执行/Applications/XAMPP/xamppfiles/bin/php -m,确认返回的扩展列表中存在sqlsrv和pdo_sqlsrv,再重启Apache即可。
MAMP PRO的解决逻辑完全一致,只需将上述步骤中XAMPP的路径替换为MAMP PRO对应的PHP工具路径即可。
内容的提问来源于stack exchange,提问作者Good Day
相关产品推荐
相关产品推荐

