Skip to content

34.3 从 Rust 调用 C 库

这个例子我们反过来,从 Rust 中调用 C 写的库。C 的实现如下所示:


rust
int add_square(int a, int b)
{
    return a * a + b * b;
}

使用如下命令可以生成对应的静态库:


rust
gcc -c -Wall -Werror -fpic simple_math.c
ar  rcs libsimple_math.a simple_math.o

现在我们到 Rust 中调用这个静态库:


rust
use std::os::raw::c_int;

#[link(name = "simple_math")]
extern "C" {
    fn add_square(a: c_int, b: c_int) -> c_int;
}

fn main() {
    let r = unsafe { add_square(2, 2) };
    println!("{}", r);
}

使用如下命令编译链接:


rust
rustc -L . call_math.rs

参数-L可以指定依赖库的查找路径,具体的名字可以通过#[link(name = "library_name")]来指定。

Released under the MIT License