Erlang Cowboy中的编译错误——bug还是我?

Erlang Cowboy中的编译错误——bug还是我?,erlang,cowboy,Erlang,Cowboy,我正试图通过严格遵循(例如剪切和粘贴)以下的入门说明来生成一个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_erlan

我正试图通过严格遵循(例如剪切和粘贴)以下的入门说明来生成一个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
,但到目前为止没有响应。

问题的原因有两个:

  • 在您的模块中有一个行为声明
    -行为(牛仔http\u处理器)。
    。这是完全正确的
  • 编译文件时,编译器无法在其搜索路径中找到
    cowboy\u http\u处理程序
    模块
  • 这会导致错误,因为行为声明会告诉编译器找到该模块,并找出行为所需的回调函数。通常情况下,如果编译器找不到行为模块,或者如果它可以找到并且缺少一些回调,那么它会发出警告并继续。但是,Makefile设置了一个编译器选项,该选项将所有警告视为错误,因此编译失败

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

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

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

    问题的原因有两个:

  • 在您的模块中有一个行为声明
    -行为(牛仔http\u处理器)。
    。这是完全正确的
  • 编译文件时,编译器无法在其搜索路径中找到
    cowboy\u http\u处理程序
    模块
  • 这会导致错误,因为行为声明会告诉编译器找到该模块,并找出行为所需的回调函数。通常情况下,如果编译器找不到行为模块,或者如果它可以找到并且缺少一些回调,那么它会发出警告并继续。但是,Makefile设置了一个编译器选项,该选项将所有警告视为错误,因此编译失败

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

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

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

    您的
    Makefile
    是什么样子的?我想如果你发电子邮件到
    扩展
    邮件列表,你会得到比发电子邮件到更多的回复essen@ninenines.eu.Hi阿康苏。我复制/粘贴了入门说明中的Makefile。谢谢你的提示:扩展邮件列表。LRP您的
    Makefile
    看起来像什么?我想如果你发电子邮件到
    扩展
    邮件列表,你会得到比发电子邮件到更多的回复essen@ninenines.eu.Hi阿康苏。我复制/粘贴了入门说明中的Makefile。谢谢你的提示:扩展邮件列表。勒帕,是的。我将路径添加到.erlang。我应该看看那个。非常感谢,罗伯特!啊,是的。我将路径添加到.erlang。我应该看看那个。非常感谢,罗伯特!