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

设置base_dir后,rebar3构建OTP release出现找不到目标及源码问题

Rebar3构建OTP Release时的源码缺失与依赖问题

问题现象

使用rebar3构建OTP Release时,配置{base_dir, }选项后,执行rebar3 release命令出现两类问题:一是提示大量未定义函数调用,二是抛出找不到源码文件的警告,具体输出如下:

===> 校验依赖...
===> 分析应用...
===> 编译nerlnetApp
===> 组装发布包nerlnet_core-1.2.2...
===> 发布包中存在缺失的函数调用。
===> 确保运行时所需的所有应用都已包含在发布包中。
===> clientStatem:init/1 调用了未定义函数 inets:start/0
===> mainGenserver:init/1 调用了未定义函数 inets:start/0
===> nerlNetStatem:wait/3 调用了未定义函数 nerlNIF:call_to_get_weights/1
===> nerlNetStatem:wait/3 调用了未定义函数 nerlNIF:call_to_set_weights/3
===> nerl_tools:http_request/4 调用了未定义函数 httpc:request/4
===> nerl_tools:http_request/4 调用了未定义函数 httpc:set_options/1
===> nerlnetApp_app:parseJsonAndStartNerlnet/1 调用了未定义函数 jsx:decode/2
===> routerGenserver:init/1 调用了未定义函数 inets:start/0
===> sourceStatem:init/1 调用了未定义函数 inets:start/0
===> 生成发布包时的警告:
*WARNING* 缺失应用sasl。无法使用此发布包进行版本升级
*WARNING* public_key: 未找到源码文件: 'OTP-PUB-KEY'.erl
*WARNING* public_key: 未找到源码文件: 'PKCS-FRAME'.erl
*WARNING* nerlnetApp: 未找到源码文件: ackHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: actionHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: castingHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: clientStateHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: clientStatem.erl
*WARNING* nerlnetApp: 未找到源码文件: guiHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: initHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: iotHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: jsonHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: jsonParser.erl
*WARNING* nerlnetApp: 未找到源码文件: mainGenserver.erl
*WARNING* nerlnetApp: 未找到源码文件: nerl.erl
*WARNING* nerlnetApp: 未找到源码文件: nerlNIF.erl
*WARNING* nerlnetApp: 未找到源码文件: nerlNetStatem.erl
*WARNING* nerlnetApp: 未找到源码文件: nerlTests.erl
*WARNING* nerlnetApp: 未找到源码文件: noMatchingRouteHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: parser.erl
*WARNING* nerlnetApp: 未找到源码文件: passHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: routerGenserver.erl
*WARNING* nerlnetApp: 未找到源码文件: routingHandler.erl
*WARNING* nerlnetApp: 未找到源码文件: sourceStatem.erl
*WARNING* nerlnetApp: 未找到源码文件: workerFederatedClient.erl
*WARNING* nerlnetApp: 未找到源码文件: workerFederatedServer.erl
*WARNING* nerlnetApp: 未找到源码文件: workerGeneric.erl
*WARNING* nerlnetApp: 未找到源码文件: workerNN.erl

解决方案

1. 修复源码文件找不到的问题

{base_dir, }配置会改变rebar3的工作目录结构,导致源码定位失败:

  • 检查rebar.config中的src_dirs配置,确保所有存放.erl文件的目录都被包含,例如:{src_dirs, ["src", "src/handlers", "src/gen_servers"]}
  • 确认base_dir的路径配置正确,优先使用绝对路径;若用相对路径,确保是基于项目根目录的相对路径

2. 解决未定义函数调用问题

这些错误是因为发布包中缺少依赖的应用或模块:

  • OTP自带应用(inets/httpc):在rebar.config的relx段添加{apps, [inets]},或者在应用的.app.src文件中把inets加入applications列表
  • 第三方依赖(jsx):确认rebar.config的deps中已声明jsx(例如{jsx, "~> 3.0"}),并执行rebar3 get-deps安装依赖
  • 自定义NIF模块(nerlNIF):检查rebar.config中的NIF编译配置,确保编译规则正确,且编译生成的.so/.dll文件被正确打包进发布包

3. 处理SASL缺失警告

若需要支持版本升级,在relx配置的apps列表中加入sasl:

{relx, [
    {release, {nerlnet_core, "1.2.2"}, [
        sasl,
        nerlnetApp
    ]}
]}.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:52:33