You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 14.04编译Erlang代码报错:type ip_address()/ip_port()未定义

解决Ubuntu 14.04编译Erlang时ip_address()/ip_port()类型未定义的问题

这种问题我之前维护老项目时碰到过,核心原因基本和Erlang版本与系统的适配有关——尤其是Ubuntu 14.04这种偏老的发行版,自带的Erlang版本大概率不支持这两个新类型。下面给你几个可行的解决方向:

  • 先确认Erlang版本
    打开终端输入erl -version查看当前版本。ip_address()和ip_port()是Erlang/OTP 18.0之后才在kernel/include/inet.hrl里正式标准化的类型,如果你的版本低于18.0(比如Ubuntu 14.04默认的R16B系列),那肯定会报这个错。

  • 手动补全类型定义(应急方案)
    如果暂时没法升级Erlang,可以在你的代码模块最开头手动添加这两个类型的定义,绕过编译报错:

    % 直接复用inet模块的底层类型定义
    -type ip_address() :: inet:ip_address().
    -type ip_port() :: inet:port_number().
    

    或者更直白地用原始类型替代:

    -type ip_address() :: tuple() | string(). % 对应IPv4元组或IPv6字符串/元组
    -type ip_port() :: integer(). % 端口号范围0-65535
    
  • 升级Erlang版本(长期解决方案)
    如果系统允许,建议直接升级到支持这两个类型的Erlang版本。可以用Erlang Solutions的源来安装,步骤如下:

    # 添加Erlang Solutions的软件源
    wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
    sudo dpkg -i erlang-solutions_1.0_all.deb
    # 更新缓存并安装新版Erlang
    sudo apt-get update
    sudo apt-get install erlang
    

    安装完成后再用erl -version确认版本是否在18.0以上。

  • 检查头文件引用是否正确
    最后再确认你的代码里有没有正确引入inet.hrl,模块开头需要加:

    -include_lib("kernel/include/inet.hrl").
    

    不过要注意,旧版本Erlang的这个头文件里确实没有这两个类型,所以如果版本不够,光引用也没用,还是得结合前面的方案。

内容的提问来源于stack exchange,提问作者Hao Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:00:14