Python cffi学習ノート1(ABI level,in-line)

990 ワード

環境
ubuntu16.04 python3.5.1+ cffi 1.7.0
インストール
pip install cffi

概要
CFI(Foreign Function Interface for Python calling C)は、ABI in-line、ABI out-line、API in-line、API out-lineの4つのモードとして使用することができる.ABIモードはバイナリファイルによるライブラリ関数の呼び出しであり、APIモードはCコンパイラによるライブラリ関数の呼び出しであり、以下に詳細な例を示す.in-lineモードでは、Pythonコードを実行するとすべてのライブラリが再ロードされますが、out-lineモードでは、呼び出すコードをモジュールにコンパイルしてからロードすることができます.
簡単な例(ABI level,in-line)
from cffi import FFI
ffi = FFI()
ffi.cdef("""
    int printf(const char *format, ...); //    man page         
""")
C = ffi.dlopen(None) #     C    
arg = ffi.new("char[]", b"world") #   C  : char arg[] = "world";
print(C.printf(b"hi there, %s.
", arg)) # printf
#    
hi there, world.
17 

この例では、Cコンパイラは一切使用されていません.これがABIモードであり,cdef()で定義されていない関数や構造体にアクセスするとプログラムがクラッシュする.
あなたの環境にCコンパイラがある場合は、APIモード(ABIモードよりも速い)を強くお勧めします.次の節で説明します.