【问题标题】:escript: exception error: undefined function piqic_erlang:main/1escript:异常错误:未定义函数 piqic_erlang:main/1
【发布时间】:2014-10-31 13:35:19
【问题描述】:

我在安装 piqic-erlang 时遇到问题。 当我“制作”时,我得到了这个:

bash-3.2$ make
rebar compile
==> piqic-erlang (compile)
==> piqi-erlang (compile)
set -e; \
   for i in piqi_rpc.piqi piqi_tools.piqi; do \
      ../piqic-erlang/piqic-erlang  $i; \
   done
escript: exception error: undefined function piqic_erlang:main/1
 in function  escript:run/2 (escript.erl, line 752)
 in call from escript:start/1 (escript.erl, line 276)
 in call from init:start_it/1 
 in call from init:start_em/1 
make[1]: *** [piqi_rpc_piqi.erl] Error 127
ERROR: Command [compile] failed!
make: *** [all] Error 1

可能是什么问题?

更新: 感谢您的帮助,但“make”之前的“make deps”不起作用。我仍然得到同样的错误。现在我尝试直接从 /piqi-erlang/priv/bin 运行脚本 piqic-erlang,但它又找不到'main'函数:

 bash-3.2$ ./piqic-erlang 
 escript: exception error: undefined function piqic_erlang:main/1
   in function  erl_eval:local_func/5 (erl_eval.erl, line 544)
   in call from escript:interpret/4 (escript.erl, line 781)
   in call from escript:start/1 (escript.erl, line 276)
   in call from init:start_it/1 
   in call from init:start_em/1

为什么 escript 看不到 'main' 函数?

【问题讨论】:

  • 您可能需要在make 之前运行make deps,至少这对我有用。
  • 你使用的是什么版本或者 Erlang 和 rebar?
  • @alavrik,我正在使用 Erlang R17 和 rebar 2.1.0-pre 17 20140906_220756 git 2.1.0-pre-171-gcd55176。注意,我已经安装了 mac OS 10.9.4。
  • @pulitta 抱歉耽搁了。我看到了 Ahmad 的回答,但无法用最新的rebar 重现它。这真的很奇怪。您可以在piqi-erlang/piqic-erlang 中运行此命令以查看filelib:fold_files/5 是否确实跳过了符号链接?谢谢。 filelib:fold_files(_Dir = "src", _Regex = "^[^._]" ".*\\.erl\$", _Recursive = true, fun(F, Acc) -> [F | Acc] end, []).

标签: erlang


【解决方案1】:

piqic-erlang 没有被正确编译,因为它的src erl 文件是符号链接,rebar 没有发现它们,因为它使用了不返回符号链接的filelib:fold_files/5! (可能是一个错误introduced in R17.1fixed in R17.1.2

作为一种解决方法,您可以手动编译它然后重新制作,这里是命令(假设您在piqi-erlang root 中):

cd piqic-erlang; erlc -o ebin src/*.erl; cd ..; make

【讨论】:

  • Ahmad,我想在上游项目中修复这个构建问题(我是 piqi 作者),但我无法重现此行为。 filelib:fold_files() 在我的环境中返回符号链接就好了。我正在使用最新的钢筋和最新的 piqi。您可以运行我在上面对原始问题的评论中发布的命令吗?谢谢!
  • 我的错,我应该解释为什么没有返回符号链接。这是 R17.1 中引入的 Erlang 中的一个错误,可能已在 R17.1.2 中修复,但我无法确认,因为它还没有进入我的操作系统包存储库。我认为您可以选择是否支持这个有缺陷的版本:)。感谢您的关注:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 2013-02-26
  • 1970-01-01
相关资源
最近更新 更多