linux

Linux中Rust如何与C/C++交互

小樊
40
2025-07-09 10:13:16
栏目: 编程语言

在Linux中,Rust可以通过FFI(外部函数接口)与C/C++进行交互。以下是一些关键步骤和注意事项:

1. 创建Rust库

首先,你需要创建一个Rust库项目,这样你可以在其中定义可以被C/C++调用的函数。

cargo new --lib my_rust_lib
cd my_rust_lib

Cargo.toml文件中添加以下内容:

[lib]
name = "my_rust_lib"
crate-type = ["cdylib"]

2. 编写Rust代码

src/lib.rs文件中编写你的Rust代码,并使用#[no_mangle]属性来防止Rust编译器优化掉你的函数。

#[no_mangle]
pub extern "C" fn rust_function() {
    println!("Hello from Rust!");
}

3. 编译Rust库

使用cargo build --release命令编译你的Rust库。

cargo build --release

编译完成后,你会在target/release目录下找到生成的共享库文件(例如libmy_rust_lib.so)。

4. 创建C/C++头文件

创建一个C/C++头文件来声明你想要调用的Rust函数。

// my_rust_lib.h
#ifndef MY_RUST_LIB_H
#define MY_RUST_LIB_H

#ifdef __cplusplus
extern "C" {
#endif

void rust_function();

#ifdef __cplusplus
}
#endif

#endif // MY_RUST_LIB_H

5. 在C/C++项目中使用Rust库

在你的C/C++项目中包含生成的头文件,并链接到Rust库。

// main.c
#include <stdio.h>
#include "my_rust_lib.h"

int main() {
    printf("Calling Rust function...\n");
    rust_function();
    return 0;
}

编译C/C++项目时,确保链接到Rust库。例如,如果你使用的是gcc

gcc -o my_c_program main.c -L/path/to/rust/library -lmy_rust_lib -lpthread -ldl

6. 运行程序

确保Rust库在运行时可以被找到。你可以将库文件复制到可执行文件所在的目录,或者设置LD_LIBRARY_PATH环境变量。

export LD_LIBRARY_PATH=/path/to/rust/library:$LD_LIBRARY_PATH
./my_c_program

注意事项

通过以上步骤,你可以在Linux中实现Rust与C/C++的交互。

0
看了该问题的人还看了