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"キーワード
- FFI
- 静的ライブラリ
- Cargo.toml