ctypes调用C动态链接库

  1. 模块ctypes
    1. 加载CDLL('./test.so')
    2. C类型转换c_float(3.14)
    3. 函数调用libc.printf(b"hello")
    4. 编译方法

模块ctypes

加载CDLL('./test.so')

Windows中使用D:\\Path\\to\\*.dll

libc = ctypes.CDLL(PATH)

C类型转换c_float(3.14)

a=c_float(3.14)

函数调用libc.printf(b"hello")

除了整数字符串都需要封装在相应的ctypes类型

1
2
3
4
#b表示2进制,u表示unicode
libc = CDLL('test.so')
printf = libc.printf()
printf("%s %d %f", b"hello", 22, c_double(3.14))

也可以指定所需的参数类型printf.argtypes, 对应的类型见表

1
2
printf.argtypes = [c_char_p, c_char_p, c_int, c_double]
printf(b"%s %d %f", b"hello", 22, 3.14)
c语言 ctypes
float <ctypes.c_float>
double <ctypes.c_double>
char* <ctypes.c_char_p>

编译方法

Mac 中使用gcc -shared -Wl,-install_name,test.so -o test.so -fPIC test.c


转载请注明来源 https://tianweiye.github.io