외부 rustc_driver
rustc_private
개요
rustc_private 기능을 사용하면 외부 크레이트에서 컴파일러 내부 구현을 사용할 수 있습니다.
공식 툴체인에서 rustc_private 사용하기
rustup으로 배포되는 공식 Rust 툴체인에서 rustc_private 기능을 사용하려면 추가 구성 요소 두 가지를 설치해야 합니다:
rustc-dev: 컴파일러 라이브러리를 제공합니다llvm-tools: 링크에 필요한 LLVM 라이브러리를 제공합니다
설치 단계
rustup으로 두 구성 요소를 모두 설치하십시오:
rustup component add rustc-dev llvm-tools
흔한 오류
llvm-tools 구성 요소가 없으면 다음과 같은 링크 오류가 발생합니다:
error: linking with `cc` failed: exit status: 1
|
= note: rust-lld: error: unable to find library -lLLVM-{version}
사용자 정의 툴체인에서 rustc-private 사용하기
직접 빌드한 툴체인이나 rustup을 사용하지 않는 환경에서는 일반적으로 추가 설정이 필요합니다:
요구 사항
- 시스템의 라이브러리 검색 경로에서 LLVM 라이브러리를 찾을 수 있어야 합니다
- LLVM 버전은 Rust 툴체인을 빌드할 때 사용한 버전과 같아야 합니다
문제 해결 단계
- LLVM이 설치되어 있고 접근할 수 있는지 확인하십시오
- 라이브러리 경로가 설정되어 있는지 확인하십시오:
export LD_LIBRARY_PATH=/path/to/llvm/lib:$LD_LIBRARY_PATH - LLVM 버전이 Rust 툴체인과 호환되는지 확인하십시오
트리 외부 프로젝트를 위한 rust-analyzer 설정하기
rustc_private 크레이트를 사용하는 트리 외부 프로젝트를 개발할 때는 rust-analyzer가 이러한 크레이트를 인식하도록 설정할 수 있습니다.
설정 단계
-
에디터 설정에서
rust-analyzer.rustc.source를"discover"로 설정하십시오.VS Code에서는
rust_analyzer_settings.json에 다음을 추가하십시오:{ "rust-analyzer.rustc.source": "discover" } -
rustc_private를 사용하는 모든 크레이트의Cargo.toml에 다음을 추가하십시오:[package.metadata.rust-analyzer] rustc_private = true
이렇게 설정하면 rust-analyzer가 트리 외부 프로젝트의 rustc_private 크레이트를 올바르게 인식하고 IDE 지원을 제공할 수 있습니다.
rustc_private의 nightly 문서 보기
최신 nightly
최신 nightly의 경우 rustc-docs 구성 요소를 설치한 뒤 브라우저에서 바로 열어 볼 수 있습니다:
rustup component add rustc-docs
rustup doc --rustc-docs
참고:
rustc-docs컴포넌트는 최신 nightly 툴체인에서만 제공되며, 모든 nightly 날짜에 존재하지 않을 수도 있습니다. 이 컴포넌트는 PR #75560(2020년 8월)에서 처음 도입되었습니다.
이전 nightly
이전 nightly의 컴파일러 내부에 의존하고 있다면, 해당 nightly의 내부 문서를 참고하는 것이 좋습니다. 이렇게 하는 유일한 방법은 문서를 로컬에서 생성하는 것입니다. 예를 들어, nightly-2025-11-08의 문서를 얻으려면 다음과 같이 하십시오.
해당 nightly의 Git 커밋 해시를 가져오십시오:
rustup toolchain install nightly-2025-11-08
rustc +nightly-2025-11-08 --version --verbose
출력에는 정확한 소스 리비전을 식별하는 commit-hash 줄이 포함됩니다. 해당 커밋에서 rust-lang/rust를 체크아웃한 다음, 컴파일러 문서의 단계를 따르십시오.
추가 자료
- GitHub 이슈 #137421에서는
rustc_private링커 오류가llvm-tools가 설치되어 있지 않아 발생하는 경우가 많다고 설명합니다.