musl은 glibc와 같은 C 표준 라이브러리로 가볍고 빠른 것이 특징이다.
musl 툴체인으로 빌드하려면 prebuilt 바이너리와 직접 빌드하는 방법이 있다.
- musl.cc 사이트에서 비공식 prebuilt 바이너리 다운로드
- musl-cross-make를 받아 가이드를 참조해 직접 빌드
여기서는 musl.cc에서 prebuilt 바이너리를 받아 컴파일 하는 방법을 설명한다.
빌드 방법
// hello_world.c
#include <stdio.h>
int main() {
printf("Hello World\n");
return 0;
}
x86-64 환경에서 네이티브로 빌드를 하려면 musl.cc 바이너리 에서
x86_64-linux-musl-native.tgz 를 다운받는다.
$ cd x86_64-linux-musl-native/bin
$ ./gcc hello_world.c
arm64 타겟의 크로스컴파일은 aarch64-linux-musl-cross.tgz를 다운로드 받아 실행한다.
$ cd aarch64-linux-musl-cross/bin
$ ./aarch64-linux-musl-gcc hello_world.c
Binary size
x86_64 시스템에서 hello_world.c 바이너리 크기를 비교해 보았다.
musl | size | glibc | size |
---|---|---|---|
musl+gcc | 7,528 | glibc+gcc | 15,960 |
musl+gcc (static) | 15,328 | glibc+gcc (static) | 900,304 |
정적으로 빌드 했을때 파일 용량 차이가 큰 것을 확인할 수 있다.
작은 바이너리가 필요할 때 유용하다.
Version
- musl: git-b76f37f, gcc: 11.2.1
- glibc: 2.35, gcc: 11.2.0