크로스 컴파일링

크리스탈은 기초적인 크로스 컴파일링을 지원합니다.

이를 위해 컴파일러 실행 파일은 두 가지 플래그를 제공합니다.

설치한 LLVM 3.5를 이용하여 llvm-config --host-target을 실행하면 --target 플래그를 알아낼 수 있습니다. 예를 들어 리눅스에서는 "x86_64-unknown-linux-gnu"를 출력할 것입니다.

--target을 통해 자동으로 설정되지 않은 컴파일 시간 플래그를 설정하기 위해서는 명령어 라인에서 -D 플래그를 주어야 합니다.

이로써 리눅스에서 돌아갈 프로그램을 맥에서 컴파일할 수 있습니다.

crystal build your_program.cr --cross-compile --target "x86_64-unknown-linux-gnu"

.o(오브젝트 파일)이 생성되며, 목표로 둔 운영체제에서 실행할 명령어가 출력될 것입니다.

cc your_program.o -o your_program -lpcre -lrt -lm -lgc -lunwind

반드시 이 .o 파일을 복사하고 해당 명령어를 실행해야 합니다. 그 후에 실행 파일을 그 운영체제에서 사용할 수 있습니다.

이 과정은 컴파일러를 아직 사용할 수 없는 운영체제로 컴파일러 자체를 새롭게 이식하기 위하여 사용됩니다. 크리스탈 컴파일러를 컴파일하기 위해서는 기존의 크리스탈 컴파일러가 필요하기 때문에, 컴파일러를 아직 사용할 수 없는 시스템에서 사용할 수 있는 대안은 두 가지가 있습니다.

  • 루비로 작성된 컴파일러 중 최신 버전을 가져와서 현재 버전까지의 컴파일러를 컴파일
  • 해당 운영체제를 목표로 .o 파일을 만들어 컴파일러를 생성

전자는 다소 길고 복잡하지만, 후자는 훨씬 쉽습니다.

크로스 컴파일링은 다른 실행 파일에도 똑같게 적용됩니다. 하지만 그 주 목적은 컴파일러입니다. 크리스탈이 한 시스템에서 쓸 수 없는 상태라면 크로스 컴파일링을 고려해볼 수 있습니다.

results matching ""

    No results matching ""