Mac M2执行Mix命令遇SSL相关错误,求解决方案
解决MacBook Pro M2(Rosetta终端)下Mix命令SSL启动失败问题
可能的错误原因
- OTP 26与OpenSSL 3.1.2在Rosetta模拟环境下存在兼容性适配问题,Erlang的ssl模块初始化时无法正确加载OpenSSL库,导致ssl_app启动失败,进而引发后续模块编译相关的
ArgumentError和MatchError。 - asdf安装Erlang时未明确指定OpenSSL的路径或编译参数,导致Erlang编译时未正确关联系统中的OpenSSL库。
- Rosetta终端下的环境变量未正确配置,Erlang无法找到OpenSSL的头文件和库文件。
具体解决办法
1. 重新编译Erlang,指定OpenSSL 3.x路径
用asdf安装Erlang时,明确指定OpenSSL路径确保正确链接:
# 卸载当前OTP 26版本 asdf uninstall erlang 26.0 # 设置OpenSSL环境变量(确认OpenSSL 3.1.2安装路径为/usr/local/opt/openssl@3) export KERL_CONFIGURE_OPTIONS="--with-ssl=/usr/local/opt/openssl@3" export KERL_BUILD_DOCS="no" # 重新安装并设置全局OTP 26 asdf install erlang 26.0 asdf global erlang 26.0
2. 配置Rosetta终端的OpenSSL环境变量
确保Rosetta终端(x86_64架构)下OpenSSL路径被优先识别:
# 验证当前OpenSSL路径 which openssl # 预期输出:/usr/local/opt/openssl@3/bin/openssl # 检查PATH顺序,确保OpenSSL 3.x路径在最前 echo $PATH
若路径不符,修改~/.zshrc(或~/.bashrc)添加以下配置:
export PATH="/usr/local/opt/openssl@3/bin:$PATH" export LDFLAGS="-L/usr/local/opt/openssl@3/lib" export CPPFLAGS="-I/usr/local/opt/openssl@3/include" export PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig"
执行source ~/.zshrc使配置生效。
3. 降级OpenSSL到1.1.x版本(备选方案)
如果OpenSSL 3.x仍存在兼容性问题,可尝试降级到OTP支持更稳定的1.1版本:
# 安装OpenSSL 1.1 brew install openssl@1.1 # 配置Erlang编译参数 export KERL_CONFIGURE_OPTIONS="--with-ssl=/usr/local/opt/openssl@1.1" # 重新安装OTP 26 asdf uninstall erlang 26.0 asdf install erlang 26.0 asdf global erlang 26.0
4. 验证Erlang SSL模块状态
安装完成后,进入Erlang Shell确认ssl模块正常:
erl > ssl:start(). % 返回ok则表示ssl模块启动正常 > ssl:versions(). % 应显示支持TLSv1.2、TLSv1.3等版本信息
验证通过后,执行mix deps.get测试问题是否解决。
内容的提问来源于stack exchange,提问作者Bhanwarlal Chaudhary
相关产品推荐
相关产品推荐

