0%

Call C Library From Python

混合编程之 Python调用C

为什么

混合编程可以充分发挥不同编程语言的优势:
C语言速度优势
python编写简单,很多现成的轮子

怎么做

ctypes

把C编译成动态库

from file

1
gcc c_func.c -shared -o c_func_dy.so

from static library

1
2
3
4
# 先将静态库解出obj文件
$ar -x mylib.a
# 再用gcc 将obj文件,编译成动态库
$gcc -shared -fPIC *.o -o mylib.so

在python文件中导入头文件

1
from ctypes import *

在python中引入c动态库,并用变量接收动态库的引用

1
lib_ref = cdll.LodaLibrary("./c_dll.so")

调用动态库方法

1
dynamic_lib_reference.function_in_lib(arguments)

eg.

1
lib_ref.my_add(num)

example

python call C example code

reference:

  1. Python Bindings: Calling C or C++ From Python
  2. -fpic 与-fPIC的区别
  3. Linux下Gcc生成和使用静态库和动态库详解
  4. python3调用C语言代码