2016-03-29 18 views
0

私が書いているライブラリにamqp_client.hrlを含める方法を理解しようとしています。ErlangライブラリのRabbiqMQにamqp_client.hrlを含める

私は、次の例に基づいて、スクリプトでそれを使用することができる午前:私はrabbitMQHandler.erlをコンパイルすることができます

-module(rabbitMQHandler). 
-compile(export_all). 
-include("amqp_client/include/amqp_client.hrl"). 

test() -> 
    {ok, Connection} = 
     amqp_connection:start(#amqp_params_network{host = "localhost"}), 
    {ok, Channel} = amqp_connection:open_channel(Connection), 
    ok = amqp_channel:close(Channel), 
    ok = amqp_connection:close(Connection), 
    ok. 

しかし:https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/erlang/send.erl

私は非スクリプトの設定でそれを使用しようとするとrabbitMQHandler:test().を実行すると、次のエラーが発生する** exception error: undefined function amqp_connection:start/1

amqp_client.hrlをライブラリに含める適切な方法は何ですか?

私は-include_lib("amqp_client/include/amqp_client.hrl").を試しましたが、違いはありません。

私はを含めて試しましたが、違いはありません。

EDIT

:emacsの中ErlangのREPLを使用してあなたのそれらのために

があなたのREPLにフラグを渡すためにあなたの.emacsファイルに以下を追加します。

(defun erl-shell (flags) 
    "Start an erlang shell with flags" 
    (interactive (list (read-string "Flags: "))) 
    (set 'inferior-erlang-machine-options (split-string flags)) 
    (erlang-shell)) 

M-x erl-shellとあなたが渡すことができますerlするフラグ。

スニペットはhttp://erlang.org/pipermail/erlang-questions/2007-January/024966.htmlから取得しました。

答えて

3

undefined function amqp_connection:start/1メッセージは通常、amqp_connectionモジュールが検索パスに含まれていないことを示します。

エスケープで使用したのと同じ-pzフラグを使用してErlangを起動する必要があります。たとえば:

1> amqp_connection:module_info(). 
[{module,amqp_connection}, 
{exports,[{start,1}, 
      {open_channel,1}, 
      {open_channel,2}, 
... 

その後、あなたはいつものようにあなたのコードを実行することができます。

$ erl -pz ./amqp_client ./rabbit_common ./amqp_client/ebin 

あなたはそれは、モジュールの情報を照会することによって動作し、ダブルチェックすることができます。

-includeと対-include_libの間に、後者があなたの場合に適切です。これは、外部アプリケーション(OTPまたは第三者)からのヘッダーを含めるための好ましい方法です。

+0

大変ありがとうございます! – RNikoopour

関連する問題