본문 바로가기
CS/개발 기록

cargo update가 만든 의외의 함정

by lms0806 2026. 6. 14.
728x90
반응형

저는 이전 포스팅에서도 말씀드렸다시피, 최신 버전을 계속해서 업데이트합니다.

 

그래서 항상 러스트 라이브러리들의 최신 버전을 유지하기 위해, cargo update를 수행합니다.

 

해당 포스팅에서는 무턱대로 cargo update를 수행하다가 발생한 문제와 이를 해결하는 방법에 대하여 설명드리고자 합니다.

뭘 업데이트 했는데?

최근에 cargo update를 통해 다음와 같이 새로운 라이브러리와 2개의 다른 라이브러리를 업데이트 하였습니다.

 

모두 dropbox의 레포에서 업데이트된 라이브러리들입니다.

Adding alloc-no-stdlib v3.0.0
Updating alloc-stdlib v0.2.2 -> v0.2.3
Updating brotli-decompressor v5.0.1 -> v5.0.2

이게 무슨 문제가 발생해?

보시면 단순하게 2개의 라이브러리 업데이트와 1개의 라이브러리 추가로만 보일겁니다.

 

근데 만약 alloc-no-stdlib를 사용하는 라이브러리를 프로젝트 내에서 사용중이라면 문제가 발생할 수 있습니다.

 

단순 cargo update를 수행하게 되면 Cargo.lock에 다음과 같이 수정됩니다.

[[package]]
name = "alloc-no-stdlib"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"

[[package]]
name = "alloc-no-stdlib"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2fb6cfd47bf496ff64095c20eaba0c201404ee38714d4142fcfa1dc334fcc7a"

그러면 alloc-no-stdlibdependencies로 가지고 있는 몇몇 라이브러리들의 dependencies들의 버전이 3.0.0으로 변경됩니다.

 

그러나, 해당 라이브러리는 최신으로 추가된 라이브러리의 버전을 허락하지 않을 수 있습니다.

 

그래서 alloc-no-stdlib을 사용하는 상위 라이브러리에서 build 에러가 발생할 수 있습니다.

 

해당 상황에서 실제로 brotli의 라이브러리가 문제를 일으켰구요

그럼 어떻게 해결해?

단순하게, 하나의 라이브러리를 하나의 버전만 사용하도록 수정하면 됩니다.

[[package]]
name = "alloc-no-stdlib"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"

[[package]]
name = "alloc-no-stdlib"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2fb6cfd47bf496ff64095c20eaba0c201404ee38714d4142fcfa1dc334fcc7a"

이렇게 되어 있는 Cargo.lock을 다음과 같이 하나만 남기도록 수정하면 됩니다.

[[package]]
name = "alloc-no-stdlib"
version = "2.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"

정리

  1. cargo update를 수행함
  2. Cargo.lockalloc-no-stdlib의 2개의 라이브러리가 추가됨
  3. 몇몇 alloc-no-stdlib을 사용하는 상위 라이브러리가 alloc-no-stdlib의 최신 버전을 사용하게 자동으로 수정됨
  4. alloc-no-stdlib의 최신 버전을 사용하도록 수정된 라이브러리들이 build 에러를 발생시킴
  5. alloc-no-stdlib의 최신 버전을 가리키지 않도록 Cargo.lock에서 alloc-no-stdlib의 버전을 하나로 통일함 (왠만하면 이전 버전으로)

현재 brotli 라이브러리는 alloc-no-stdlib의 버전 고정과 관련하여 해결이 되었지만, 혼자서 릴리즈 빌드가 되지 않아 해결된 사항이 적용되지 않아 발생한 것으로 확인되었습니다.

 

제가 해당 포스팅에 대해서 말씀드린 부분은 임시방편의 내용이며, 결과적으로는 상위 crate의 라이브러리 수정이 필요해 보입니다.

 

728x90
반응형

'CS > 개발 기록' 카테고리의 다른 글

오픈 소스 기여  (0) 2026.03.22

댓글