2012-08-04 5 views
1

철근 아래에 Erlang 애플리케이션 (현재는 라이브러리 모듈 중 일부)이 번들로 있습니다. 디렉토리 구조는 다음과 같습니다.얼랭 (Erlang) 셸의 신비한 행동

MyProject 
- apps 
-- myapp 
--- ebin 
--- src 
--- yada 
- rebar 
- rebar.conf 

MyProject $ ./rebar compile이 예상대로 응답합니다.

Erlang 쉘 (MyProject $ erl -pa apps/*/ebin myapp)을 열었으며 내 보낸 함수를 정상적으로 실행할 수 있습니다.

이제 소스 파일을 편집하고 내 보낸 함수를 추가 한 다음 다시 컴파일합니다. 하지만, 내 새로운 내 보낸 함수를 실행하려고하면 --- 정의되지 않은 함수가 발생합니다. Erlang 쉘에서 myAppModule : module_info/0을 실행합니다. 방금 소스 파일에 추가 한 새 기능이나 다른 기능에 대한 변경 사항은 나열되지 않습니다.

관련 * .beam 파일을 삭제하고 다시 컴파일하십시오. 아직도 내 변경 사항을 볼 수 없습니다.

하지만 이제는 Erlang 셸에서 q를 다시 입력하고 다시 입력하십시오. 당신은 무엇을 알 수 있습니까! 새로운 기능을 포함하여 모든 기능이 정상적으로 작동합니다.

왜 이렇게해야합니까?

많은 감사,

LRP

답변

5

당신이 어떻게 컴파일합니까? 껍질에서 또는 어떻게?

실행중인 erlang의 "외부"파일을 다시 컴파일하는 경우 명시 적으로 쉘에 모듈을 다시로드해야합니다 (l(myAppModule).). 셸 (c(myAppModule).)을 사용하여 다시 컴파일하면 모듈이 다시 컴파일되고 다시로드되지만 .beam 파일은 ebin 디렉토리에 저장되지 않지만 현재 작업 디렉토리에 저장됩니다.

+0

프로젝트 디렉토리에서 컴파일합니다 : ./rebar compile. 그래서 l (myAppModule) 접근 방식을 시도해 보겠습니다. –

+0

그랬습니다! 많은 감사합니다, Robert! –

관련 문제