【问题标题】:Compile error in Erlang Cowboy -- bug or me?Erlang Cowboy 中的编译错误——错误还是我?
【发布时间】:2013-09-26 02:35:31
【问题描述】:

我正在尝试通过严格遵循(例如剪切和粘贴)入门说明来生成 Erlang Cowboy 版本:

https://github.com/extend/cowboy/blob/master/guide/getting_started.md

在我创建Makefile 并执行$ make 之前一切顺利。编译过程结束如下:

...
make[1]: Leaving directory `/home/lloyd/hello_erlang/deps/cowboy'
ERLC   hello_erlang_app.erl hello_handler.erl hello_erlang_sup.erl
compile: warnings being treated as errors
src/hello_handler.erl:3: behaviour cowboy_http_handler undefined
make: *** [ebin/hello_erlang.app] Error 1

我已经三次检查了我的代码,但没有看到我遗漏的任何内容。

那么,这是我的错误吗?还是入门说明或 Cowboy 本身中的错误?如果这是我的错误,我该如何解决?

我已经向essen@ninenines.eu 提出了这个问题,但到目前为止没有任何回应。

【问题讨论】:

  • 您的Makefile 是什么样的?我认为,如果您发送电子邮件至extend 邮件列表,您将获得比发送电子邮件至 essen@ninenines.eu 更多的回复。
  • 你好阿康苏。我从入门说明中复制/粘贴了 Makefile。感谢您的提示:扩展邮件列表。 LRP

标签: erlang cowboy


【解决方案1】:

问题的原因是双重的:

  1. 在您的模块中,您有一个行为声明-behaviour(cowboy_http_handler).。这是完全正确的。
  2. 编译文件时,编译器在其搜索路径中找不到cowboy_http_handler 模块

这会导致错误,因为行为声明告诉编译器去寻找那个模块并找出行为所期望的回调函数。通常,如果编译器找不到行为模块,或者它可以找到并且缺少一些回调,那么它会发出一个警告并继续。但是,您的 Makefile 设置了一个编译器选项,该选项将所有警告视为错误,因此编译失败。

对此有(至少)三种解决方案:

  1. 删除编译器选项并接受您收到警告。
  2. 确保编译器可以找到行为模块并进行检查。一种简单的做法是为牛仔光束文件目录添加一个-pa Dir 选项,以便它可以找到该文件。
  3. 设置 Erlang,使其自动查找牛仔目录,例如 $ERL_LIBS

请注意,即使编译器找到了正确的模块,您仍然必须确保在运行系统时 Erlang 可以找到该目录。编译时和运行时环境之间没有自动对等。

【讨论】:

  • 啊,确实如此。我添加了.erlang 的路径。我应该看到那个。非常感谢,罗伯特!
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
相关资源
最近更新 更多