关于Rust调用C++,因为接口比较复杂,貌似Rust不打算支持。而对于C函数,则相对支持较好。
如果要研究C++/Rust相互关系的话,可以参考:
https://docs.rs/cxx/latest/cxx/
Rust ❤️ C++
这里只对调用C静态库做一个最简短的介绍。
根据官方教材的内容略作一个说明,官方的程序在这里,
Unsafe Rust - The Rust Programming Language
这里我们建一个StaticLib1.cpp的文件,内容如下,
#include <cstdlib>
#include <cinttypes>
extern "C" std::int32_t abs(std::int32_t n) {
return std::abs(static_cast<std::intmax_t>(n));
}
注意,这里接口是extern "C",也就是标准C接口。
无论是用visual studio 2019或GCC,在windows下都可以生成这样一个静态库:StaticLib1.lib。
然后新建一个rust程序,
cargo new rust-to-c
将rust-to-c/src/main.rs的内容改为,
#[link(name = "StaticLib1")]
extern "C" {
fn abs(input: i32) -> i32;
}
fn main() {
unsafe {
println!("Absolute value of -3 according to C: {}", abs(-3));
}
}
再拷贝lib到,
rust-to-c/StaticLib1.lib,
然后
cargo build
就可以看到生成了文件
rust-to-c/target/debug/rust-to-c.exe,
用指令
cargo run
就可以得到执行结果了,如下,
参考资料:
FFI - The Rustonomicon
本文结束