Python 调用 C/C++

学习一门学问,最重要的是把握主干内容,迅速建立对这门学问的整体概念,不必一开始就考虑所有的细枝末节和特殊情况,自乱阵脚。
我们从实践入手 :

一. 准备 Python 中要使用的 C 程序 my_calculate.c:
#include
#include

#define True  1
#define False 0
#define None  -1

// 对两个整数进行相加操作
int add(unsigned long long a, unsigned long long b)
{
    return a + b;
}

// 对两个整数进行相减操作
int minus(unsigned long long a, unsigned long long b)
{
    return a - b;
}

// 对两个整数进行相乘操作
int plus(unsigned long long a, unsigned long long b)
{
    return a * b;
}

// 对两个整数进行相除操作
int divide(unsigned long long a, unsigned long long b)
{
    return a / b;
}
使用 gcc 对代码进行编译 :
gcc my_calculate.c -fPIC -shared -o my_calculate.so
其中的参数意义是 :
-fPIC :
作用于编译阶段,告诉编译器产生与位置无关的代码 ( Position-Independent Code ) , 产生的代码中,全部使用相对地址, 这也是编译动态链接共享库所要求的。
-shared :
生成一个共享的目标文件,它能够与其他目标一起链接生成可执行文件等文件。
-o my_calculate.so :
输出文件名为 my_calculate.so 其中 so 为 shared object , so 文件是 Linux 系统下动态链接共享库文件,与 Windows 中的 .dll 文件对应。
编译结果 :
上述编译命令生成文件 my_calculate.so

二. 使用 Python 调用 my_calculate.so:
from ctypes import *
my_lib = cdll.LoadLibrary("./my_calculate.so")
print(my_lib.add(123, 234))
357
print(my_lib.minus(123, 234))
-111
print(my_lib.plus(12, 23))
276
print(my_lib.divide(12, 2))
6
这样就在 Python 中调用了 C 程序代码

三. Ctype 简介:
Ctype 是 Python 的外部功能库,允许调用 DLL 或者共享库中的函数,从 Python2.5 开始 Ctypes 成为了 Python 的标准模块之一 。
Ctype 兼容 C 的数据类型 :


可以这么来使用 :
from ctypes import *
i = c_int(45)
print(i.value)
45

猜你喜欢

转载自blog.csdn.net/jiangmengya1/article/details/78070183