2016-06-11 3 views
3

Rust 프로젝트에서 링크하고 싶은 타사 C 라이브러리가 있습니다. github에서 호스팅되고 정적 라이브러리로만 컴파일됩니다. Cargo에서이 종속성을 가져 오게 할 방법이 있습니까? 나는 거기에 없다고 생각하고있다. 나는 그것을 의존성으로 추가하려고 시도하고 "Cargo.toml을 찾을 수 없습니다 ..."오류가 발생했습니다.Rust/Cargo에서 타사 정적 C 라이브러리 종속성을 처리하는 방법?

대안으로, build.rs 파일을 수정하여 git2-rs 크레이트를 사용하여 라이브러리의 태그를 다운로드하고 환경 변수를 통해 전달 된 태그 이름으로 지정할 수 있다고 생각했습니다.

또 다른 옵션은 내 프로젝트에 C 라이브러리의 소스를 포함하는 것이지만, 내 크레이의 사용자가 제 3 자 라이브러리와 다른 (호환되는) 버전을 내 크레이트와 함께 사용하려는 경우, 쉽게 그렇게 할 수는 없을 것입니다.

그렇다면 커뮤니티의 다른 사람들이 이와 같은 상황을 어떻게 처리합니까?

답변

6

일반적으로 libfoo-sys crate을 생성하려고합니다. 이 상자에는 기본 라이브러리를 컴파일하고 링커 옵션을 설정하는 빌드 스크립트가 있습니다.

빌드 스크립트는 cc crate과 같은 빌드 타임 종속성을 사용하여 네이티브 라이브러리를 더 쉽게 다운로드하고 컴파일 할 수 있습니다.

환경 변수 또는 기능을 사용하여 기본 라이브러리의 출처를 선택할 수 있습니다. 사용자가 시스템 패키지 관리자 (또는 수작업으로 컴파일 된 버전)에서 이미 설치 한 것을 사용할 수도 있고 어딘가에서 소스를 다운로드 할 수도 있고 저장소에 코드를 포함시킬 수도 있고 git 하위 모듈을 사용하여 참조 할 수도 있습니다 실제로 코드를 복사하는 대신 다른 git 저장소.

관련 문제