温馨提示×

Rust在Linux上如何与C语言交互

小樊
47
2025-10-24 18:20:07
栏目: 编程语言

Rust可以通过FFI(外部函数接口)与C语言进行交互。这允许Rust代码调用C库中的函数,反之亦然。以下是在Linux上使用Rust与C语言交互的基本步骤:

  1. 创建一个C库:

首先,你需要创建一个C库,以便Rust代码可以调用它。以下是一个简单的C库示例:

// my_c_library.h
#ifndef MY_C_LIBRARY_H
#define MY_C_LIBRARY_H

#ifdef __cplusplus
extern "C" {
#endif

void c_function();

#ifdef __cplusplus
}
#endif

#endif // MY_C_LIBRARY_H
// my_c_library.c
#include <stdio.h>
#include "my_c_library.h"

void c_function() {
    printf("Hello from C!\n");
}

编译C库为静态库或动态库:

gcc -c my_c_library.c -o my_c_library.o
ar rcs libmy_c_library.a my_c_library.o # 静态库
# 或者
gcc -fPIC -c my_c_library.c -o my_c_library.o
gcc -shared -o libmy_c_library.so my_c_library.o # 动态库
  1. 在Rust中使用C库:

在Rust代码中,你需要使用extern关键字声明要调用的C函数,并使用unsafe块来调用它们。首先,在Cargo.toml文件中添加build.rs脚本以链接C库:

[dependencies]
libc = "0.2"

[build-dependencies]
cc = "1.0"

然后,创建一个build.rs文件,用于编译C库:

fn main() {
    cc::Build::new()
        .file("my_c_library.c")
        .compile("my_c_library");
}

接下来,在Rust代码中声明C函数并调用它:

// main.rs
extern crate libc;

use std::os::raw::{c_void};

#[link(name = "my_c_library", kind = "static")] // 或者 "dylib",如果你使用的是动态库
extern "C" {
    fn c_function();
}

fn main() {
    unsafe {
        c_function();
    }
}

现在,你可以运行cargo run来编译并运行Rust程序,它将调用C库中的函数。

注意:在与C语言交互时,需要确保内存安全。在Rust中使用unsafe块时要格外小心,确保遵循Rust的内存安全规则。

0