2014-09-15 1 views
1

Попытки запустить учебник образцов для RabbitMQ в Erlang под OSX, но он выдает следующее сообщение:Не может найти включать Lib «rabbit_common/включить/rabbit.hrl» в ковбойской

./send.erl:20: can't find include lib "rabbit_common/include/rabbit.hrl" 
./send.erl:21: can't find include lib "rabbit_common/include/rabbit_framing.hrl" 
escript: There were compilation errors. 

amqp_example.erl:

-module(amqp_example). 

-include("amqp_client.hrl"). 

-compile([export_all]). 

test() -> 
    %% Start a network connection 
    {ok, Connection} = amqp_connection:start(#amqp_params_network{}), 
    %% Open a channel on the connection 
    {ok, Channel} = amqp_connection:open_channel(Connection), 

    %% Declare a queue 
    #'queue.declare_ok'{queue = Q} 
     = amqp_channel:call(Channel, #'queue.declare'{}), 
    %% Publish a message 
    Payload = <<"foobar">>, 
    Publish = #'basic.publish'{exchange = <<>>, routing_key = Q}, 
    amqp_channel:cast(Channel, Publish, #amqp_msg{payload = Payload}), 

    %% Get the message back from the queue 
    Get = #'basic.get'{queue = Q}, 
    {#'basic.get_ok'{delivery_tag = Tag}, Content} 
     = amqp_channel:call(Channel, Get), 

    %% Do something with the message payload 
    %% (some work here) 

    %% Ack the message 
    amqp_channel:cast(Channel, #'basic.ack'{delivery_tag = Tag}), 

    %% Close the channel 
    amqp_channel:close(Channel), 
    %% Close the connection 
    amqp_connection:close(Connection), 

    ok. 

Пожалуйста, помогите мне решить эту проблему. Спасибо !!!

ответ

2

У Erlang есть макрос include_lib, который может искать библиотеки в пути и удобен, поскольку вам не нужно указывать версию библиотеки - она ​​автоматически использует новейшую версию. Таким образом, вместо

-include("rabbit_common-3.3.5/include/rabbit.hrl"). 

вы можете просто написать:

-include_lib("rabbit_common/include/rabbit.hrl"). 

Таким образом, в вашем случае, вы должны убедиться, что файл rabbit_common-[version]/include/rabbit.hrl в ERL_LIBS пути. В tutorial, you are using, они хотят, чтобы вы загрузить эти файлы из here и распаковывать их, как это:

unzip -d deps deps/amqp_client.ez 
unzip -d deps deps/rabbit_common.ez 

Эти распаковка команды делать не работы на OS X, так как UnZip работает только с ZIP-файлами. Так что это может быть вашей проблемой. Попробуйте использовать другое приложение, чтобы распаковать их и дважды проверить, что файл есть. Не забудьте добавить ERL_LIBS=deps до компиляции и запуска примера:

ERL_LIBS=deps erlc -o ebin amqp_example.erl 
ERL_LIBS=deps erl -pa ebin 
+0

Здравствуйте @tkowal, Как я могу добавить файл rabbit_common- [версия] /include/rabbit.hrl в пути ERL_LIBS? –

+0

Вы должны добавить каталог deps, добавив 'ERL_LIBS = deps' перед вашей командой. Затем, если вы распакуете файл 'deps/rabbit_common-3.3.5/include/rabbit.hrl', он найдет его. – tkowal

+0

Спасибо за ваш helpul @tkowal, он работает сейчас. :) –

Смежные вопросы