13.3.2. 编译并静态链接到绑定的 C++ 语言库
链接绑定的 C++ 语言库非常类似于链接绑定的 C 语言库。编译并静态链接绑定的 C++ 库时,与链接绑定的 C 语言库相比有两个核心区别:一是通过构造器方法 cpp(true)
指定 C++ 编译器;二是通过在 C++ 源文件顶部添加 extern "C"
代码段,以防止 C++ 编译器的名称篡改。
Cargo.toml
[package]
name = "cc-bundled-cpp"
version = "0.1.0"
authors = ["zzy <linshi@budshome.com>"]
edition = "2018"
build = "build.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[build-dependencies]
cc = "1.0.66"
[dependencies]
build.rs
fn main() { cc::Build::new() .cpp(true) .file("src/foo.cpp") .compile("foo"); }
src/foo.cpp
extern "C" {
int multiply(int x, int y);
}
int multiply(int x, int y) {
return x*y;
}
src/main.rs
extern {
fn multiply(x : i32, y : i32) -> i32;
}
fn main(){
unsafe {
println!("{}", multiply(5,7));
}
}