M1 Mac mini(Big Sur 11.6)下SQL Server sqlsrv扩展OpenSSL库加载失败问题求助
解决M1 Mac mini上SQL Server连接的OpenSSL加载问题
我之前在M1 Mac上碰到过几乎一模一样的问题,给你几个可以尝试的方向,按顺序来试大概率能解决:
1. 先临时验证动态链接库路径是否是问题根源
ODBC驱动加载OpenSSL时,可能不会直接用你设置的PATH,而是需要指定动态链接库的位置。可以先在终端里用以下命令测试你的连接脚本:
DYLD_LIBRARY_PATH="/opt/homebrew/opt/openssl@1.1/lib" php your-sql-connection-script.php
如果这样能成功连接,说明是库路径没有被ODBC驱动识别到。接下来需要把这个路径永久加入环境:
- 如果你用PHP CLI,编辑
~/.zshrc或~/.bash_profile(取决于你用的shell),添加:
然后执行export DYLD_LIBRARY_PATH="/opt/homebrew/opt/openssl@1.1/lib:$DYLD_LIBRARY_PATH"source ~/.zshrc生效。 - 如果你用Apache/Nginx运行PHP,需要在服务配置里添加环境变量:
- Apache:在
httpd.conf里加SetEnv DYLD_LIBRARY_PATH "/opt/homebrew/opt/openssl@1.1/lib" - Nginx:在
fastcgi_param配置块里添加DYLD_LIBRARY_PATH "/opt/homebrew/opt/openssl@1.1/lib";
- Apache:在
2. 重新编译sqlsrv/pdo_sqlsrv扩展,确保链接正确的OpenSSL
有时候扩展编译时可能默认链接了系统自带的OpenSSL(而不是你brew装的1.1版本),需要重新编译:
- 先卸载现有扩展:
pecl uninstall sqlsrv pdo_sqlsrv - 设置编译环境变量,指定brew的OpenSSL路径:
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include" export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib" - 重新安装扩展:
pecl install sqlsrv pdo_sqlsrv - 重启PHP服务或终端,再测试连接。
3. 重新安装ODBC驱动,绑定正确的OpenSSL
如果上面两步都没用,可能是ODBC驱动本身没链接到正确的OpenSSL,需要重装驱动:
- 卸载现有驱动:
brew uninstall msodbcsql17 mssql-tools - 同样设置环境变量后重装:
export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include" export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib" brew install msodbcsql17 mssql-tools
4. 确认所有组件都是ARM64架构
M1 Mac是ARM64架构,要确保PHP、OpenSSL、ODBC驱动和扩展都是ARM64版本:
- 检查PHP架构:
file $(which php),输出里应该包含arm64 - 检查OpenSSL库架构:
file /opt/homebrew/opt/openssl@1.1/lib/libssl.dylib,同样应该显示arm64
如果发现有x86_64的组件,说明可能是用Rosetta安装的(比如brew在/usr/local下),建议卸载后用ARM版brew(默认在/opt/homebrew)重新安装所有组件。
内容的提问来源于stack exchange,提问作者Jamie B
相关产品推荐
相关产品推荐

