LoginSignup
5
8

More than 5 years have passed since last update.

Pythonからctypesを使って自作したC言語の共有ライブラリを呼び出す

Last updated at Posted at 2019-04-03

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に投稿してあります。

参考

Linuxで共有ライブラリの作成とダイナミックリンクをする方法:小粋空間
Python Document 3.7

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8