近日需要用python写一个接口来调用c++项目。在网上找了一些方法感觉较为紊乱,其实python调用c本身就是较为简单的,因为python就是用c写的呀!主要方法就是在python中调用ctypes包,使用相关api调用项目编译生成的.so文件(类似于动态链接库)。
唯一需要注意的就是在c++文件里需要将调用的函数用
extern "C"{
void c_change(int ii, int graphk, char *filen){ // 该函数需要接受三个参数
change(ii, graphk, filen);
}
}
进行声明。原因是python只能调c函数。
之后进行编译时要附加一些选项:
g++ -o name.so -g main.cpp test1.cpp ..... -lm -shared -fPIC
之后你就可以愉快的在python里去调用c++函数啦!
python代码如下:
from ctypes import *
import numpy as np
# 该函数的参数表示c++项目中的输入参数
def ex_cpp(II, graph_kind, file_name):
so = cdll.LoadLibrary
# 调change函数
# int change(int ii, int graphk, char * filen);
lib = so("./name.so")
change = lib.c_change
change.argtypes = [c_int, c_int, POINTER(c_char)] # 代表参数类型
str_ = bytes(file_name,'utf-8')
# 传递字符串的方法
cast(str_, POINTER(c_char))
change(c_int(II), c_int(graph_kind), str_)
lib.main()