2014-01-17 18 views
3

Windows 7 (64 비트)에서 MinGW/MSYS를 사용하여 Erlang RabbitMQ 플러그인을 빌드하는 동안 위의 오류가 발생했습니다. Erlang v5.10.3 (32 비트)을 사용하고 있습니다. 내 시스템에서 RabbitMQ를 실행할 수 있습니다. http://pastebin.com/S739wfhB generate_deps의 전체 코드는 여기에서 찾을 수 있습니다 - - http://pastebin.com/N4HVz8z1얼랭 (Erlang) escript : 예외 오류 : 오른쪽 값의 일치 없음 {error, enoent}

[email protected] /d/RabbitMQ/build-source/rabbitmq-public-umbrella/presence-exchange-master 
$ make 
[elided] generate deps 
escript: exception error: no match of right hand side value {error,enoent} 
    in function generate_deps__escript__1389__793192__493000:detect_deps/5 (d:/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps, line 40) 
    in call from generate_deps__escript__1389__793192__493000:'-main/1-fun-0-'/6 (d:/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps, line 19) 
    in call from lists:foldl/3 (lists.erl, line 1248) 
    in call from generate_deps__escript__1389__793192__493000:main/1 (d:/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps, line 17) 
    in call from escript:run/2 (escript.erl, line 747) 
    in call from escript:start/1 (escript.erl, line 277) 
    in call from init:start_it/1 (init.erl, line 1054) 
    in call from init:start_em/1 (init.erl, line 1034) 

나는 페이스트 빈에 전체 오류를 게시했습니다. 나는 또한 Cygwin에서 사용하여 시도했지만 그것은 또 다른 오류를 반환 - escript을 : 파일을 열지 못했습니다 :/홈/후지쯔/rabbitmq/빌드 소스/rabbitmq - 공공 우산/generate_deps

EDIT 1

CYGWIN은 다음을 반환합니다.

$ make 
[elided] generate deps 
escript: Failed to open file: /cygdrive/d/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps 
[elided] generate deps 
escript: Failed to open file: /cygdrive/d/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps 
make: *** No rule to make target 'build/deps.mk', needed by 'ebin/presence_exchange.beam'. Stop. 

그러나 head 명령을 사용하여 파일을 열 수 있습니다.

[email protected] /cygdrive/d/RabbitMQ/build-source/rabbitmq-public-umbrella/presence-exchange-master 
$ head /cygdrive/d/RabbitMQ/build-source/rabbitmq-public-umbrella/generate_deps 
#!/usr/bin/env escript 
%% -*- erlang -*- 
-mode(compile). 

%% We expect the list of Erlang source and header files to arrive on 
%% stdin, with the entries colon-separated. 
main([TargetFile, EbinDir]) -> 
    ErlsAndHrls = [ string:strip(S,left) || 
         S <- string:tokens(io:get_line(""), ":\n")], 
    ErlFiles = [F || F <- ErlsAndHrls, lists:suffix(".erl", F)], 

답변

1

는 대부분의 경우 이것은 열려고하는 파일을 찾을 수 없습니다 때문에, 이것은 POSIX enoent 오류가 무엇을 의미하는지입니다. Cygwin을 사용할 때 더욱 분명합니다. 얼랭 badmatch 오류가 라인 23에서 온다 : 당신이 {ok, Hld}의 파일과 일치를 열려고

{ok, Hdl} = file:open(TargetFile, [write, delayed_write]), 

. 그러나 file:open은 파일을 찾을 수 없으면 {error,enoent}을 반환하므로 일치가 실패하고 오류가 발생합니다.

편집 :

내가보기로 문제가 작성하려고하는 파일입니다. 그 디렉토리에 글을 쓸 수 있습니까? 파일이 이미있는 경우 쓰기 용으로 열 수 있습니까?

+0

감사합니다.하지만 head 명령을 사용하여 파일을 열 수 있습니다. 위의 편집 1을 참조하십시오. 그 이유는 무엇일까요? – Joshua

+0

같은 파일을 열려고합니까? 또한'head'는 코드를 읽으려는 동안 파일을 열어 코드를 작성하려고 시도합니다. 파일에 어떤 액세스 모드가 있고 어떤 파일 유형입니까? – rvirding

+0

예, 동일한 파일입니다. ls -l은 "-rwxr-xr-x 1 Fujitsu None 2666 Jan 15 13:59 generate_deps"를 리턴합니다. 나는 또한 chmod 777을 시도했다. generate_deps는 bash 파일의 일종으로 여기 코드를 볼 수있다 - http://pastebin.com/N4HVz8z1 – Joshua