0

我正在尝试通过严格遵循(例如剪切和粘贴)入门说明来生成 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,但到目前为止没有任何回应。

4

1 回答 1

5

问题的原因有两个:

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

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

有(至少)三个解决方案:

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

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

于 2013-09-20T18:22:04.503 回答