TL;DR

  • C のライブラリは、#[link(name = "...")] 属性か、build.rs で cargo:rustc-link-lib を出力して指定する。
  • 依存関係を Cargo に伝えるには、Cargo.toml の links キーを使う。

内容

項目34 FFI境界を通過するものを制御しようのうち、Rust から C のライブラリを呼び出す場合の話である。

C のツールチェーンがライブラリを作る方法や形式は、環境によって異なる。たとえば Unix 系では、ar コマンドで libcffi.a のような静的ライブラリを作って使う。

Rust のビルドシステムでは、使う C のライブラリを次のように指定する。

#[link(name = "cffi")] // libcffi.a が必要
extern "C" {
    // ...
}

ビルドスクリプトの build.rs で cargo:rustc-link-lib を出力しても指定できる。

fn main() {
    println!("cargo:rustc-link-lib=cffi");
}

この依存関係を Cargo に認識させるには、Cargo.toml の links キーを使う。

[package]
links = "cffi"

キーワード