Python 调用 C/C++ 的程序主要有两种方式:
使用 ctypes 调用动态库
ctypes 的方式相对来说成本较低,首先 ctypes 是内置库,使用方便,使用的过程中与 C/C++ 动态库的逻辑是完全独立的,互相可以单独维护。但是相对也有明显的缺点,C++ 在编译后的函数名会变,ctypes 使用起来不方便,API 相对也比较繁琐,写起来略微麻烦一些,使用出错的话会导致进程退出。
本文主要介绍 ctypes 的基本用法,可以对现有的 C/C++ 代码进行简单的二次封装后进行使用。笔者认为 ctypes 本身还是比较适合轻量级的使用场景,如果逻辑较为复杂的,请考虑使用 C/C++ 扩展的方式。
本文的 Python 以 2.7 版本为例,编译使用 gcc。
简单示例
写一个简单的 Hello 来说明一下最基本的用法。首先定义一个简单的 c 函数。
//hello_module.c
#include
int hello(const char* name) {
printf("hello %s!\n", name);
return 0;
}
编译生成动态库,动态库不同的系统后缀不同(Windows 的 dll,Linux 的 so,Mac 的 dylib),需要注意,本文以 so 为例。
gcc -fPIC -shared hello_module.c -o hello_module.so
通过 ctypes 来进行动态库加载及函数调用,注意 windows 的调用方式有专有的 API。