使用带有Rust的.c源文件

时间:2013-03-18 22:47:42

标签: rust

是否有标准的方法来包含.c源文件?

到目前为止,我一直在使用extern "C" { ... }来公开函数,将.c编译为目标文件,运行rustc直到ld chokes与未定义的引用,并使用error: linking with 'cc' failed with code 1; note: cc arguments: ...之后显示的参数运行cc myobjfile.o ...

2 个答案:

答案 0 :(得分:6)

  

编者注:此答案早于Rust 1.0,不再适用。

卢克曼对IRC提出了暗示;在箱子文件中使用extern "C" { ... }#[link_args="src/source.c"];一起使用。

答案 1 :(得分:2)

在构建脚本中使用cc crate将C文件编译成静态库,然后将静态库链接到Rust程序:

Cargo.toml

[package]
name = "calling-c"
version = "0.1.0"
authors = ["An Devloper <an.devloper@example.com>"]
edition = "2018"

[build-dependencies]
cc = "1.0.28"

build.rs

use cc;

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

src / example.c

#include <stdint.h>

uint8_t testing(uint8_t i) {
  return i * 2;
}

src / main.rs

extern "C" {
    fn testing(x: u8) -> u8;
}

fn main() {
    let a = unsafe { testing(21) };
    println!("a = {}", a);
}