发布于2026-07-18 阅读(0)
扫一扫,手机访问
在CentOS系统里,让Rust和C语言通过FFI(即外部函数接口)愉快地协作,其实并没有想象中那么神秘。下面一步步拆解这个过程,照着走一遍就能跑通。

第一步自然是确保Rust已经安装妥当。如果还没装,运行下面这条命令即可:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装完成后,记得重新加载一下shell配置文件,让环境变量生效:
source $HOME/.cargo/env
新建一个Rust库项目,名字可以随意取,这里用my_rust_lib:
cargo new --lib my_rust_lib
cd my_rust_lib
为了让Rust代码能被C语言调用,需要在Cargo.toml里指定库类型为动态链接库,并引入libc依赖:
[lib]
name = "my_rust_lib"
crate-type = ["cdylib"]
[dependencies]
libc = "0.2"
在src/lib.rs中,用extern "C"块声明外部可调用的函数,并加上#[no_mangle]防止名称被编译器改写:
#[no_mangle]
pub extern "C" fn rust_function() {
println!("Hello from Rust!");
}
执行编译命令,生成.so文件:
cargo build --release
编译完成后,在target/release目录下就能找到那个.so文件了。
创建一个C文件(比如main.c),先声明Rust函数的原型,然后在main里调用它:
#include
// 声明Rust函数
void rust_function();
int main() {
printf("Calling Rust function...\n");
rust_function();
return 0;
}
用gcc编译C代码,并链接上刚才生成的动态库:
gcc -o main main.c -Ltarget/release -lmy_rust_lib -lpthread -ldl
这里-L指定了库的搜索路径,-l指定库名(去掉前缀lib和后缀.so)。
跑一下生成的可执行文件:
./main
正常的话,你会看到:
Calling Rust function...
Hello from Rust!
extern "C"就是指定C的ABI。#[no_mangle]是必选项,否则Rust编译器会搞出一些奇奇怪怪的名称,C端就找不到函数了。-L后面跟着的路径要确保正确,库名称也要对应上。按照这个流程操作,CentOS上的Rust与C互操作就能顺利跑通。实际项目中,你还可以在Rust端调用C库的函数,原理类似,把extern "C"块里的声明换成C函数的声明就行了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8