Pythonのctypesで共有ライブラリを呼び出す
共有ライブラリをPythonから呼び出す
dlopenで共有ライブラリを使ってみるではdlopenを使って
共有ライブラリの関数を呼び出しましたが、今回はPythonというスクリプト言語から呼び出す方法を紹介します。
Pythonは今やかなりメジャーな言語なのでみなさんご存知でしょう。
割と直感的にコードがかけて、ライブラリの呼び出しなども簡単なため、Blenderになどのように
Python用のバインディングがあるプロジェクトも多いですね。
Pythonにはctypesというとても便利なライブラリがあって、
簡単に共有ライブラリを扱えます。
今回はこのctypesを使います。
それではさっそくはじめましょう。
Pythonをインストール
まずはPythonをインストールしましょう。
わたしはCent OSを使っているのでyumでインストールしますが、それぞれの環境に合わせてインストールしてください。
$ sudo yum install python
$ python -V
Python 2.6.6
インストール完了です。
バージョンが2.6.6と古いですが、まあいいや。
共有ライブラリを作る
[dlopenで共有ライブラリを使ってみる]({% post_url tech/2012-05-14-shared-library-with-dlopen %})でやったのと同様に共有ライブラリを作ります。
foo.cとして次の内容を保存します。
#include <stdio.h>
void foo()
{
printf("foo called!\n");
}
"foo called!"だけ標準出力に表示する単純な関数fooを定義しています。
コンパイルします。
$ gcc -shared -fPIC -o foo.so foo.c
これで共有ライブラリfoo.soができました。
ctypesで呼び出す
それでは準備も整ったので、Pythonのctypesで共有ライブラリを呼び出しましょう。
foo.pyとして次のコードを保存します。
from ctypes import *
def main():
foo = cdll.LoadLibrary("./foo.so")
foo.foo()
if __name__ == "__main__":
main()
さっそく実行してみましょう。
$ python foo.py
foo called!
foo.soの関数fooが呼ばれていることがわかります。
とても簡単に呼び出すことができますね。
まとめ
今回はPythonから共有ライブラリの関数を呼び出す方法を見ていきました。
Pythonはスクリプト言語なのでコンパイルする必要がなく、気軽に共有ライブラリの関数を呼び出すことができます。
なかでもctypesは非常に強力なライブラリで、
わたしはこのためにPythonを使っています。
ぜひみなさんも使ってみて下さいね。
ご質問等、何かありましたらこちらへ。