本日は
JuliaからCの関数を呼び出すというお話です.
JuliaをPythonから,PythonからJuliaを呼び出すというのは結構楽っぽい.
ではJuliaからCを呼び出すのは・・・?
こちらの英語のブログを参考にしました.
Julia calling C: A more minimal example
環境
MacOSX で行なっています.
準備(Cのコードを準備)
二つのdoubleの値の平均を求めるという簡単なサンプルを用意します.
calc_mean.c
double mean(double a, double b) {
return (a + b) / 2;
}
これを共有ライブラリとしてビルドします:
$ gcc -shared -fPIC -o libmean.so calc_mean.c
$ ls
calc_mean.c libmean.so
呼び出す
ターミナルを開いてjuliaを起動します.
julia> cfunc=(x,y)->ccall((:mean,"libmean.so"),Float64,(Float64,Float64),x,y)
julia> cfunc(3.0,4.0)
3.5
やっていることは次の通りです.
- mean関数をibmean.soから取り出して戻り値,引数の型情報を指定.
- 無名関数による
cfunc
を定義 - 呼び出し
期待通り3.5が得られましたね.
他にも
[Calling a C function from Julia and passing a 2D array as a pointer of pointers as argument ]
(https://stackoverflow.com/questions/33003174/calling-a-c-function-from-julia-and-passing-a-2d-array-as-a-pointer-of-pointers)
が参考になります.