M1芯片MacBook通过pecl安装sqlsrv-5.8.1报make失败问题咨询
M1芯片Mac安装sqlsrv-5.8.1扩展(适配PHP7.3)报错解决方案
报错核心原因
sqlsrv 5.8.1版本发布早于Apple Silicon芯片量产,默认编译配置未适配arm64架构,直接执行pecl安装命令时,链接器无法匹配对应架构的依赖符号,最终触发ld: symbol(s) not found for architecture arm64、make执行失败的问题。
操作步骤
- 先安装arm64版本的全部依赖,全程使用原生arm64架构终端执行命令,不要开启Rosetta转译:
brew install unixodbc msodbcsql17 autoconf automake libtool
如果之前通过Rosetta装过x86版本的上述依赖,先执行brew uninstall 包名卸载干净后再重装,避免架构冲突。
- 手动拉取sqlsrv 5.8.1源码编译,不要直接用pecl一键安装:
# 下载对应版本源码 pecl download sqlsrv-5.8.1 # 解压并进入源码目录 tar -xzf sqlsrv-5.8.1.tgz cd sqlsrv-5.8.1
- 执行phpize生成编译配置,请确认调用的是你已安装的PHP7.3对应的phpize:
phpize
如果系统有多个PHP版本,直接写phpize的绝对路径即可,比如brew安装的PHP7.3路径一般为/opt/homebrew/opt/php@7.3/bin/phpize。
- 执行configure命令,手动指定编译架构和依赖路径:
./configure --with-php-config=$(which php-config) \ CXXFLAGS="-arch arm64 -I/opt/homebrew/opt/unixodbc/include" \ LDFLAGS="-arch arm64 -L/opt/homebrew/opt/unixodbc/lib -L/opt/homebrew/lib" \ CC="clang -arch arm64" \ CXX="clang++ -arch arm64"
- 编译并安装扩展:
make clean make -j$(sysctl -n hw.ncpu) sudo make install
- 修改PHP7.3对应的php.ini配置文件,在文件末尾添加扩展加载配置:
extension=sqlsrv.so
brew安装的PHP7.3默认php.ini路径一般为/opt/homebrew/etc/php/7.3/php.ini,如果找不到路径可以执行php --ini查看配置文件位置。
- 验证安装结果:
php -m | grep sqlsrv
命令返回sqlsrv即代表扩展安装成功,重启httpd服务后即可在web环境中正常调用。
注意:如果编译时还是报架构相关错误,可以先执行
file /opt/homebrew/opt/unixodbc/lib/libodbc.dylib检查依赖库的架构,确认输出包含arm64字样再重新编译。
内容的提问来源于stack exchange,提问作者Eolynas
相关产品推荐
相关产品推荐

