
本文详细讲解在 Apple M1 芯片 Mac 上通过 PECL 安装 sqlsrv 和 pdo_sqlsrv 扩展的正确方法,重点解决 ld: symbol(s) not found for architecture arm64 编译链接错误。
本文详细讲解在 apple m1 芯片 mac 上通过 pecl 安装 sqlsrv 和 pdo_sqlsrv 扩展的正确方法,重点解决 `ld: symbol(s) not found for architecture arm64` 编译链接错误。
在 macOS M1(ARM64 架构)环境下安装 Microsoft SQL Server 的 PHP 扩展(如 sqlsrv 和 pdo_sqlsrv)时,常见报错 ld: symbol(s) not found for architecture arm64,根本原因在于编译器未能正确定位 unixODBC 的 ARM64 兼容头文件与动态库路径,或指定了错误的版本号导致 PECL 尝试拉取不兼容的旧构建。
关键原则:避免指定具体版本号(如 -5.8.1)
PECL 默认会下载与当前 PHP 版本及系统架构匹配的最新兼容版本。手动指定 sqlsrv-5.8.1 可能触发已废弃或未提供 ARM64 二进制的旧包,从而导致 make 阶段链接失败。官方自 sqlsrv 5.9.0+ 起全面支持 Apple Silicon(ARM64),因此应让 PECL 自动选择适配版本。
✅ 正确安装步骤如下(以 Homebrew 安装的环境为例):
-
确保依赖已就绪
brew install unixodbc openssl
-
设置正确的编译标志(指向 ARM64 兼容路径)
立即学习“PHP免费学习笔记(深入)”;
注意:M1 上 Homebrew 默认安装路径为 /opt/homebrew,而非 /usr/local。unixodbc 头文件位于 /opt/homebrew/opt/unixodbc/include/,而动态库需链接 /opt/homebrew/lib/(非 /usr/lib 或旧路径)。
-
执行 PECL 安装(不带版本号)
sudo CXXFLAGS="-I/opt/homebrew/opt/unixodbc/include/" \ LDFLAGS="-L/opt/homebrew/lib/" \ pecl install sqlsrvsudo CXXFLAGS="-I/opt/homebrew/opt/unixodbc/include/" \ LDFLAGS="-L/opt/homebrew/lib/" \ pecl install pdo_sqlsrv -
启用扩展
安装完成后,确认 php.ini 中已添加:extension=sqlsrv extension=pdo_sqlsrv
可通过 php --ini 查找配置文件位置,并重启 Web 服务(如 sudo apachectl restart)。
⚠️ 重要注意事项
- 不要使用 pecl install sqlsrv-5.8.1 —— 该版本未正式支持 ARM64,强制安装将触发链接器找不到 arm64 符号的错误;
- 若已失败,先运行 pecl uninstall sqlsrv pdo_sqlsrv 清理残留,再重试;
- 确保 phpize 和 php-config 来自同一 PHP 安装(推荐使用 brew install php@7.3 或 php@8.1 等明确版本,避免系统 PHP 干扰);
- 如仍报错,请检查 otool -arch arm64 -L /opt/homebrew/lib/libodbc.dylib 是否返回有效 ARM64 架构库——若显示 x86_64,说明 unixODBC 未正确安装为 ARM64 版本,需重装:brew reinstall unixodbc --build-from-source。
完成上述步骤后,运行 php -m | grep sqlsrv 应可见 sqlsrv 和 pdo_sqlsrv,表示扩展已成功加载。这是目前在 M1/M2 Mac 上稳定部署 SQL Server PHP 驱动的推荐实践。



















