openlang

여러 beam 파일을 하나로 합칠 수 있나요?

.beam을 스크립트처럼 써서 코드를 감추고 어디서나 실행하려고 해요.

보통은 여러 파일이 함께 동작하잖아요, 예를 들면:


entry.erl
helper.erl
....

여러 beam 파일을 하나의 beam으로 합칠 수 있나요?

지금 떠오르는 건 beam을 erl 파일에 넣은 뒤 컴파일하는 방법뿐이에요, 이런 식으로요


["[",
lists:map(fun(Artifact) ->
  {ok, Payload} = prim_file:read_file(Artifact),
  ["{", filename:basename(Artifact, ".beam"), ",", io_lib:format("~w", [Payload]), "},"]
end, Artifacts)
"ok]"]

이렇게 만들고


[{module, <<"....">>}]

그다음 code:load_file로 읽는 거죠

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    코드를 감추고 어디서나 실행하려고 해요

    .beam 파일은 완전히 이식 가능한 건 아니에요. Erlang VM은 더 최신 OTP나 너무 오래된 버전으로 만든 파일을 받아들이지 않아요.

    .beam을 스크립트처럼 써서

    보통 이런 경우에는 escript (https://www.erlang.org/doc/apps/stdlib/escript.html)를 써요. 여러 beam 파일과 Erlang 런타임을 함께 담을 수 있는 아카이브 형식이에요. Erlang 런타임에는 아카이브를 풀어서 실행하는 escript 프로그램이 들어 있어요. rebar3도 escript 빌드를 지원해요.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. docker-compose 콘솔 출력 줄이기

    개발 환경에서 docker-compose up으로 모든 서비스를 시작하면 컨테이너 몇 개가 수백 줄씩 출력을 쏟아내요. 이 출력을 간편하게 걸러 낼 수 있을까요? 아니면 더 좋게는 docker-compose up이 실행되는…

    답글 3최근 활동 bash
  2. C 대신 D로 Python 확장 모듈을 만들 수 있을까요?

    D는 C와 링크할 수 있다고 하더군요. D로 Python 확장 모듈을 작성하고 싶어요. 제가 놓친 이유 때문에 이 방법이 아예 불가능한 건 아닐까요?

    답글 2최근 활동 d
  3. Micro 플러그인을 Nix에서 선언할 수 있나요?🤔

    python에서는 이렇게 쓸 수 있어요: Python.withPackages (q: with q; [ fastapi ]) Micro 에디터에도 같은 방식이 있나요? micro 에디터 패키지와 플러그인을 함께 지정할 수 있나요…

    답글 3최근 활동 nix