2016-06-11 4 views
3

Rustプロジェクトにリンクしたい第三者のCライブラリがあります。 githubでホストされ、静的ライブラリとしてのみコンパイルされます。カーゴがこの依存関係を私に取ってもらう方法はありますか?私はそこにないと思っている。私はそれを依存関係として追加しようとしましたが、「Cargo.tomlを見つけることができませんでした...」というエラーが発生しました。Rust/Cargoでサードパーティ製の静的Cライブラリの依存関係を処理する方法は?

代わりに、私はbuild.rsファイルを変更して、git2-rs crateを使ってライブラリのタグをダウンロードし、おそらく環境変数に渡されたタグ名として指定することを考えました。

私のプロジェクトにCライブラリのソースを含めることもできますが、私のクレートのユーザーが別の(ただし互換性のある)バージョンのサードパーティ製ライブラリを自分のクレートと使いたいと思っていました。簡単にそうすることはできないでしょう。

このような状況を処理するコミュニティの他の人たちはどうですか?

答えて

6

通常、libfoo-sys crateを作成します。そのクレートには、ネイティブライブラリをコンパイルし、リンカオプションを設定するビルドスクリプトがあります。

ビルドスクリプトでは、cc crateのようなビルド時の依存関係を使用して、ネイティブライブラリのダウンロードとコンパイル処理を容易にすることができます。

環境変数または機能を使用して、ネイティブライブラリの元の場所を選択できます。システムパッケージマネージャー(または手作業でコンパイルされたバージョン)によって既にインストールされているものを使用することも、ソースをどこかからダウンロードすることも、リポジトリーにコードを含めることもできますし、gitサブモジュールを使って参照することもできます実際にコードをコピーするのではなく、別のgitリポジトリ。

関連する問題