プログラミング

RustとC言語の連携

RustからC言語で作成したライブラリを呼び出すのは比較的簡単に実現できます。以下の1本のシェルでは,Cのライブラリを書き出して,Rustから呼び出すプログラムを作成します。

Rustのコード内にextern “C”でC言語の関数のプロトタイプ宣言に相当するインタフェース定義を記述した上で,呼び出す時にunsafeで囲んでやれば呼び出せます。rustcでコンパイルする際に,-lオプションでライブラリ名を指定して,-Lオプションでライブラリの場所を指定する必要があります。

#!/bin/bash

gcc --shared -o libadd.so -xc - << EOF
int add(int x, int y) { return x + y; }
EOF

cat << EOS > main.rs
extern "C" {
    fn add(x: i32, y: i32) -> i32;
}
fn main() {
    unsafe {
      println!("add(100,200) = {}", add(100, 200));
    };
}
EOS

rustc main.rs -l add -L .
if [ $? -eq 0 ]; then
  ./main
fi