備忘録

備忘録

Pythonでダイナミックリンクライブラリを利用する方法

Ⅰ. はじめに

タイトルの通り「Pythonでダイナミックリンクライブラリを利用する方法」です。

Ⅱ. やり方

1. ダイナミックリンクライブラリを作成する

mylib.c

#include <stdio.h>
 
int hello() {
  printf("hello world\n");
  return 123;
}
gcc -shared -fPIC -o libmylib.so mylib.c
2. Pythonから呼び出す

test.py

import ctypes

lib = ctypes.cdll.LoadLibrary('./libmylib.so')
x = lib.hello()
print(x)
実行結果
$ python test.py
hello world
123

Ⅲ. 関数名に記号が入っている場合について

エクスポートされた関数名に$などの記号が含まれている場合があります。

$ nm -D libgk.so
...
000092e0 T  aaagg$b

そのような場合pythonから呼び出すには以下のように行います。

import ctypes

lib = ctypes.cdll.LoadLibrary('./libgk.so')
func = getattr(lib, 'aaagg$b')
func()