PythonでC言語のライブラリを呼び出して使用する方法を調べたのでメモしておきます。
環境
コンパイル環境:Xcode 10.2に含まれるgcc
Python:3.7.2
C言語の共有ライブラリを作成する
Pythonから呼び出すライブラリ(libmyadd.so)を作成します。
ライブラリの内容は整数型の足し算(add)関数で構成されています。
math.c
int add(int a, int b){ return (a + b); }
共有ライブラリを作成するためには、以下のコマンドを実行します。
gcc -shared -fPIC -o libmyadd.so math.c
この様にすると、libmyadd.soが作成されます。
Pythonからlibmyadd.soを使用する
これをPythonから呼び出すのためのpythonのコードは以下の様になります。
なお、ライブラリの配置場所はソースコードと同じディレクトリであるとします。
main.py
import ctypes as ct
libc = ct.cdll.LoadLibrary("./libmyadd.so")
if (__name__ == "__main__"):
print(libc.add(1, 2))
その他(自作したライブラリをCで使う
余談ですが、C言語から呼び出す場合もメモっておきます。
なお、ライブラリの配置場所はソースコードと同じディレクトリであるとします。
main.c
#include <stdio.h>
int add(int a, int b);
int main(void)
{
printf("%d¥n", add(1, 2));
return 0;
}
これを以下の様にコンパイルします。
gcc -L./ -lmyadd -o main main.c
これを実行するには以下の様に実行します。
LD_LIBRARY_PATH=./myadd ./main
まとめ
今回はPythonのctypesというパッケージを使って、Pythonから自作したC言語の共有ライブラリを呼び出しました。まだ曖昧な理解の部分もあるので、今度調べて記事を更新したいと思います。
なお作成したファイルはGitHubに投稿してあります。