mold - 현대식 고성능 링커 치트시트
mold (Modern Linker)는 GNU ld, gold, LLVM lld의 드롭인 대체제로, 모든 CPU 코어를 사용하도록 처음부터 설계되었습니다. 링킹은 보통 병렬 빌드의 직렬화된 꼬리입니다 — 16개 코어에서 200개 파일을 컴파일하면 1개 코어는 링크를 기다립니다. mold는 그 단계를 병렬화하여 링크 시간을 자주 한 자릿수로 감소시키는데, 이는 대형 C, C++, Rust 코드베이스에서 편집-컴파일-실행 루프에서 가장 눈에 띕니다.
설치
| 플랫폼 | 명령 |
|---|
| Debian/Ubuntu | sudo apt install mold |
| Fedora | sudo dnf install mold |
| Arch Linux | sudo pacman -S mold |
| macOS (Homebrew) | brew install mold |
| 소스에서 | rui314/mold repo 빌드 |
| 확인 | mold --version |
mold 사용 (3가지 방법)
| 방법 | 방법 |
|---|
| 래퍼 | mold -run cargo build / mold -run make |
| 컴파일러 플래그 | -fuse-ld=mold (GCC 12+/Clang) |
| 심링크 | ld를 mold로 지정 (시스템 전체) |
# 가장 간단함: 모든 빌드 명령 래핑
mold -run make -j$(nproc)
mold -run cargo build --release
Rust 구성
# ~/.cargo/config.toml 또는 프로젝트 .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
| 접근 방식 | 참고 |
|---|
link-arg=-fuse-ld=mold | 표준, clang 또는 GCC 12+ 필요 |
mold -run cargo build | 구성 변경 필요 없음 |
| 대상별 섹션 | 다른 플랫폼에 영향을 주지 않음 |
C/C++ 구성
# 직접 컴파일러 플래그
gcc -fuse-ld=mold main.c -o main
clang++ -fuse-ld=mold app.cpp -o app
# CMake
cmake -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" ..
# Makefile
LDFLAGS += -fuse-ld=mold
mold가 사용되었는지 확인
# 이진 파일의 주석 섹션에 기록된 링커 확인
readelf -p .comment ./my-binary | grep -i mold
# 또는 mold의 통계와 함께 실행
mold -run cargo build 2>&1 | tail
유용한 옵션
| 옵션 | 효과 |
|---|
--threads=N | 워커 스레드 제한 |
-run CMD | 빌드 명령 래핑 |
--perf | 성능 분류 출력 |
--stats | 링크 통계 방출 |
--gc-sections | 미사용 섹션 제거 |
--icf=all | 동일 코드 폴딩 (더 작은 바이너리) |
# 링크 시간이 어디로 가는지 확인
mold --perf -run cargo build --release
mold가 가장 도움이 되는 경우
| 상황 | 이점 |
|---|
| 많은 객체가 있는 대형 바이너리 | 최대 절대 절감 |
| 빈번한 증분 재구축 | 가장 큰 삶의 질 향상 |
| 디버그 빌드 (큰 심볼 테이블) | 매우 눈에 띔 |
| 사용 가능한 많은 CPU 코어 | 코어로 확장 |
| 작은 프로젝트 | 적은 — 링크가 이미 빠름 |
라이선싱 및 플랫폼 참고
| 참고 | 세부 |
|---|
| 라이선스 | MIT (현대 버전) |
| Linux | 완전히 지원됨, 주요 대상 |
| macOS | 지원됨; Apple 자체 링커도 개선됨 |
| Windows | 주요 대상이 아님 |
mold vs 다른 링커
| 링커 | 상대 속도 | 참고 |
|---|
| GNU ld | 기준선 (가장 느림) | 많은 시스템에서 기본값 |
| gold | ld보다 빠름 | 대부분 대체됨 |
| lld (LLVM) | 훨씬 빠름 | 좋은 기본값, 잘 지원됨 |
| mold | 가장 빠름 | 대형 병렬 링크에 최고 |
sccache와 결합하세요 전체 승리: sccache는 재컴파일을 회피하고, mold는 남은 링크를 가속화합니다.
리소스