Windows 11下Phoenix应用编译ssl_verify_fun失败求解决
Windows 11下Phoenix应用编译依赖错误修复方案
问题背景
在Windows 11系统中运行Phoenix应用时,因依赖错误无法完成编译。
已尝试操作
- 下载适配OTP 26的Erlang和Elixir 1.15.4,执行
mix phx.server时触发错误:
$ mix deps.compile ssl_verify_fun ==> ssl_verify_fun Compiling 7 files (.erl) src/ssl_verify_hostname.erl:16: can't find include lib "public_key/include/public_key.hrl"
- 参考Ubuntu环境的同类问题,得知Linux下可通过安装
erlang-dev包解决,但Windows无对应选项。 - 卸载原有Erlang和Elixir,改用Scoop安装旧版本:
elixir 1.15.4 main 2023-07-27 10:27:04 erlang 25.3.2.4 main 2023-07-27 10:10:31
错误详情
问题仍未解决,编译时出现大量关联错误,核心原因均为无法找到public_key/include/public_key.hrl头文件,导致证书相关的记录、宏未定义:
==> ssl_verify_fun Compiling 7 files (.erl) src/ssl_verify_fingerprint.erl:15:14: can't find include lib "public_key/include/public_key.hrl" % 15| -include_lib("public_key/include/public_key.hrl"). % | ^ src/ssl_verify_pk.erl:14:14: can't find include lib "public_key/include/public_key.hrl" % 14| -include_lib("public_key/include/public_key.hrl"). % | ^ # 其余关联错误省略,均源于上述头文件缺失
修复方法
1. 更换完整Erlang安装包
确保安装的是完整Erlang/OTP开发包,而非精简运行时版本。官网下载Windows安装包时,选择带开发组件的完整版,精简版通常会缺失public_key相关头文件。
2. 校验环境变量配置
- 设置
ERLANG_HOME环境变量指向Erlang安装根目录,例如C:\Program Files\Erlang OTP\25.3.2.4 - 将
%ERLANG_HOME%\bin添加到系统PATH,确保命令行能识别erl、rebar3等工具
3. 手动指定编译路径
在项目根目录执行以下命令,强制指定public_key的头文件路径进行编译(替换public_key-1.12.1为你安装目录下实际的版本号,可在%ERLANG_HOME%\lib下查看):
mix deps.compile ssl_verify_fun --force --erl-opts "-I \"%ERLANG_HOME%\lib\public_key-1.12.1\include\""
4. 调整依赖版本
尝试锁定ssl_verify_fun为Windows兼容性较好的版本,修改项目mix.exs中的依赖项:
defp deps do [ # 其他依赖保留 {:ssl_verify_fun, "~> 1.1.6", override: true} ] end
随后执行:
mix deps.get mix deps.compile --force
5. 切换到WSL2环境
若上述方法无效,推荐使用Windows Subsystem for Linux 2(WSL2):
- 启用WSL2并安装Ubuntu发行版
- 在WSL2中执行
sudo apt update && sudo apt install erlang-dev elixir - 将项目复制到WSL2环境,执行
mix deps.get和mix phx.server
内容的提问来源于stack exchange,提问作者Flame_Phoenix
相关产品推荐
相关产品推荐

