返回

在 Rust 中与 C/C++ 库无缝交互

见解分享

如何在 Rust 中引用自定义 C/C++ 库

引言

Rust 是一个现代编程语言,它以其出色的内存安全性和并行性而闻名。但是,它有时需要与现有的 C/C++ 库进行交互。在本教程中,我们将探讨如何在 Rust 项目中引用自定义的 C/C++ 库,让你可以充分利用 Rust 的功能,同时仍然可以访问 C/C++ 生态系统。

设置 Rust 项目

要开始使用,请使用 Cargo 创建一个新的 Rust 项目:

cargo new my_project

转到创建的项目目录,并创建一个名为 build.rs 的文件。此文件将包含用于配置构建脚本的代码。

Cargo 构建脚本

Cargo 构建脚本是 Rust 特有的一种构建脚本,允许你在构建过程中执行自定义操作。它主要用于生成代码、准备资源或配置构建系统。

build.rs 中,我们将编写代码来链接我们的 C/C++ 库。

// build.rs

fn main() {
    // 设置链接器
    let mut linker = cc::Linker::new();
    // 添加你的 C/C++ 库路径
    linker.include("path/to/your/c_or_cpp_library");
    // 链接你的 C/C++ 库
    linker.link("your_library_name");
}

编写 Cargo 配置文件

下一步,我们需要更新 Cargo.toml 文件以指定我们的构建脚本。在 [profile.dev][profile.release] 部分下,添加以下行:

[profile.dev]
build-script = "build.rs"

[profile.release]
build-script = "build.rs"

构建和链接 C/C++ 库

现在,当你使用以下命令构建项目时,Rust 编译器将执行 build.rs 脚本并链接指定的 C/C++ 库:

cargo build

构建完成后,链接的 C/C++ 库将可供 Rust 代码使用。

Rust 中调用 C/C++ 函数

要调用 C/C++ 函数,你需要在 Rust 代码中使用 extern 。例如:

// my_library.h
extern "C" {
    int add(int a, int b);
}
// main.rs
extern crate my_library;

fn main() {
    let result = unsafe { my_library::add(1, 2) };
    println!("Result: {}", result);
}

结论

通过使用 Cargo 构建脚本,我们能够在 Rust 项目中引用和链接自定义的 C/C++ 库。这使得 Rust 开发人员可以利用 C/C++ 生态系统的优势,同时享受 Rust 的现代特性和安全保障。现在,你可以开始将 C/C++ 库集成到你的 Rust 项目中,扩展其功能并创建更强大的应用程序。