当前位置:首页 > Rust > 正文

Rust语言中使用cc crate构建C编译器(手把手教你用Rust调用和编译C代码)

在现代系统编程中,Rust语言因其内存安全性和高性能而备受青睐。然而,在实际开发中,我们常常需要与现有的C代码库交互,或者在Rust项目中嵌入C模块以提升性能或复用已有逻辑。这时,cc crate(也称为cc-rs)就派上了大用场。

本文将带你从零开始,使用cc crate在Rust项目中编译C代码,并实现Rust与C的无缝调用。即使你是编程小白,也能轻松上手!

Rust语言中使用cc crate构建C编译器(手把手教你用Rust调用和编译C代码) Rust语言  cc crate C编译器构建 Rust调用C代码 第1张

什么是 cc crate?

cc 是一个Rust的构建依赖(build dependency),用于在编译Rust项目时自动调用系统的C编译器(如gcc、clang)来编译C/C++源文件,并将其链接到最终的Rust二进制文件中。它是Rust生态中处理C互操作性的标准工具之一。

第一步:创建Rust项目

首先,确保你已安装Rust(可通过 rustup 安装)。然后在终端中执行:

cargo new rust_cc_democd rust_cc_demo  

第二步:添加 cc crate 依赖

打开 Cargo.toml 文件,在底部添加以下内容:

[build-dependencies]cc = "1.0"  

注意:这里使用的是 build-dependencies 而不是普通的 dependencies,因为 cc 只在构建阶段使用。

第三步:编写C代码

在项目根目录下创建一个 src/ 子目录(如果不存在),然后新建一个C文件 src/hello.c

#include <stdio.h>void say_hello() {    printf("Hello from C!\n");}  

第四步:编写 build.rs 构建脚本

在项目根目录下创建 build.rs 文件,这是Rust的构建脚本入口:

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

这段代码告诉 cc 编译 hello.c 并生成一个名为 hello 的静态库,供Rust链接使用。

第五步:在Rust中调用C函数

修改 src/main.rs,通过 extern "C" 声明外部C函数:

extern "C" {    fn say_hello();}fn main() {    unsafe {        say_hello();    }}  

注意:调用C函数必须放在 unsafe 块中,因为Rust无法保证C代码的安全性。

第六步:编译并运行

在终端执行:

cargo run  

你应该会看到输出:

Hello from C!  

常见问题与注意事项

  • 确保系统已安装C编译器(如Linux/macOS默认有clang/gcc,Windows可安装Visual Studio Build Tools或MinGW)。
  • 如果C函数需要返回值或参数,需在Rust中正确声明类型(如 i32, *const c_char 等)。
  • 对于复杂项目,可使用 bindgen 自动生成Rust绑定,避免手动声明。

总结

通过本文,你已经学会了如何在Rust语言项目中使用cc crate来构建C代码,并成功实现了Rust调用C代码的功能。这种能力在需要高性能计算、复用C库或进行底层开发时非常有用。

掌握C编译器构建技巧,将大大拓展你的Rust开发边界。赶快动手试试吧!

关键词回顾:Rust语言、cc crate、C编译器构建、Rust调用C代码