콘텐츠로 이동

mold - 현대식 고성능 링커 치트시트

mold - 현대식 고성능 링커 치트시트

mold (Modern Linker)는 GNU ld, gold, LLVM lld의 드롭인 대체제로, 모든 CPU 코어를 사용하도록 처음부터 설계되었습니다. 링킹은 보통 병렬 빌드의 직렬화된 꼬리입니다 — 16개 코어에서 200개 파일을 컴파일하면 1개 코어는 링크를 기다립니다. mold는 그 단계를 병렬화하여 링크 시간을 자주 한 자릿수로 감소시키는데, 이는 대형 C, C++, Rust 코드베이스에서 편집-컴파일-실행 루프에서 가장 눈에 띕니다.

설치

플랫폼명령
Debian/Ubuntusudo apt install mold
Fedorasudo dnf install mold
Arch Linuxsudo 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기준선 (가장 느림)많은 시스템에서 기본값
goldld보다 빠름대부분 대체됨
lld (LLVM)훨씬 빠름좋은 기본값, 잘 지원됨
mold가장 빠름대형 병렬 링크에 최고

sccache와 결합하세요 전체 승리: sccache는 재컴파일을 회피하고, mold는 남은 링크를 가속화합니다.

리소스