在Ubuntu下,Rust可以通过FFI(外部函数接口)与C语言互操作。以下是一些基本步骤:
首先,你需要创建一个C库,以便Rust可以调用其中的函数。你可以使用任何文本编辑器创建一个C源文件,例如hello.c,并添加以下代码:
#include <stdio.h>
void hello_from_c() {
printf("Hello from C!\n");
}
然后,使用以下命令编译C源文件,生成共享库:
gcc -fPIC -shared -o libhello.so hello.c
这将在当前目录下生成一个名为libhello.so的共享库。
接下来,在Rust中调用C函数。首先,在Cargo.toml文件中添加以下依赖项:
[dependencies]
libc = "0.2"
然后,在Rust代码中,使用extern关键字声明要调用的C函数,并使用unsafe块来调用它。例如,在main.rs文件中添加以下代码:
extern crate libc;
use libc::c_void;
#[link(name = "hello", kind = "dylib")]
extern "C" {
fn hello_from_c();
}
fn main() {
unsafe {
hello_from_c();
}
}
这里,我们使用#[link(name = "hello", kind = "dylib")]属性来链接到之前创建的libhello.so共享库。然后,我们声明了一个名为hello_from_c的外部函数,并在unsafe块中调用它。
最后,使用以下命令编译并运行Rust程序:
cargo build
cargo run
如果一切顺利,你应该会看到以下输出:
Hello from C!
这就是在Ubuntu下使用Rust与C语言互操作的基本过程。你可以根据需要扩展这个示例,例如传递参数或返回值。