怎么做 Rust 和 C++ 的联合调用
时间: 2024-05-10 14:21:03 浏览: 181
Rust 和 C 可以通过 FFI(Foreign Function Interface)进行联合调用。
下面是一个简单的例子,展示了如何在 Rust 中定义一个函数,并在 C 中调用它:
Rust 代码:
```rust
// src/lib.rs
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}
```
这里我们使用了 `#[no_mangle]` 属性来确保 Rust 编译器不会修改函数名(因为 C 不支持 Rust 的命名规范)。我们还使用了 `extern "C"` 来指定函数的调用约定,确保它与 C 兼容。
C 代码:
```c
// main.c
#include <stdio.h>
extern int add(int a, int b);
int main() {
int result = add(1, 2);
printf("Result: %d\n", result);
return 0;
}
```
这里我们使用 `extern` 关键字来声明 Rust 函数,然后就可以在 C 中调用它了。
在编译 Rust 代码时,我们需要使用 `--crate-type=cdylib` 选项来生成一个动态链接库,以便 C 代码可以链接到它:
```
$ rustc --crate-type=cdylib src/lib.rs
```
然后我们可以编译 C 代码:
```
$ gcc main.c -L. -lrust_example -o main
```
这里我们使用了 `-L` 选项来指定 Rust 动态链接库的目录,`-lrust_example` 指定库的名称,`-o` 指定输出文件名。
最后运行 C 代码:
```
$ ./main
Result: 3
```
这样就完成了 Rust 和 C 的联合调用。
阅读全文