Posted: 2024.08.26
#Rust
#C
C言語で書いた関数をRustから呼ぶ
まず Rust のプロジェクトを作る:
cargo new rust-c-example
C言語のプログラムを適当に作り,lib/spam.c
に配置する.ディレクトリ構成やファイル名は任意だが,Rust のプログラムディレクトリ (src/
以下) は避けるのが慣例っぽい.
#include<stdio.h>
void spam() {
printf("spam ham egg\n");
}
int add(int a, int b) {
return a + b;
}
src/main.rs
にC言語の関数を呼び出すコードを書く:
extern "C" {
fn spam();
fn add(a: i32, b: i32) -> i32;
}
fn main() {
unsafe { spam(); };
let answer = unsafe { add(10, 32) };
println!("{:}", answer);
}
Cargo.toml
にビルドスクリプト名と cc
パッケージを追加する:
[package]
name = "rust-c-example"
version = "0.1.0"
edition = "2021"
build = "build.rs"
[dependencies]
[build-dependencies]
cc = "1"
ビルドスクリプト build.rs
を書く:
fn main() {
cc::Build::new()
.file("lib/spam.c")
.compile("spam");
}
プログラムをビルドおよび実行する:
cargo run
実行すると以下の結果が得られる:
spam ham egg
42
おわり