Appearance
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")]
来指定。