Rust に関数を実装し、それを C から呼び出します。
あまり引数や戻り値を考えなくても良さそうな関数を Rust で定義する
#![crate_type = "dylib"]
#[no_mangle]
pub extern fn sayGreeting() {
println!("Hello, world.");
}
#[no_mangle]
pub extern fn rust_add(x: i32, y: i32) -> i32 { x + y }
Rust のコードをコンパイルする
$ rustc rustcode.rs
$ ls .
librustcode.so rustcode.rs
Rust の関数をコールする C のコードを書く
#include <stdio.h>
void sayGreeting(void);
int rust_add(int x, int y);
int main(int argc, char **argv)
{
sayGreeting();
printf("result: %d\n", rust_add(10, 15));
return 0;
}
C のコードをコンパイルする
$ gcc -o main sample.c -L. -lrustcode
実行する
$ LD_LIBRARY_PATH=./ ./main
Hello, world.
result: 25
お試しということで、簡単なコードで動作確認をしてみました。
次は文字列型とかどういう感じになるんだか、気になるところ。