我正试图通过严格遵循(例如剪切和粘贴)入门说明来生成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
我已经对我的代码进行了三次检查,但看不到任何我错过的内容。
那么,这是我的错误吗?或者“入门”说明或牛仔本身的错误?如果这是我的错误,我该如何解决?
我已经向essen@ninenines.eu
提出了这个问题,但到目前为止还没有回应。
答案 0 :(得分:5)
问题的原因有两个:
-behaviour(cowboy_http_handler).
。这是完全正确的。cowboy_http_handler
模块这导致错误,因为行为声明告诉编译器出去找到该模块并找出行为所需的回调函数。通常,如果编译器找不到行为模块,或者它可以找到并且缺少一些回调,那么它会发出关于此的警告并继续。但是,Makefile会设置一个编译器选项,将所有警告视为错误,因此编译失败。
至少有三种解决方案:
-pa Dir
选项,以便它可以找到该文件。$ERL_LIBS
。请注意,即使编译器找到了正确的模块,您仍然必须确保在运行系统时Erlang可以找到该目录。编译时和运行时环境之间没有自动等效。