linux下python3调用c++的方法并传递参数

江枫思渺然 提交于 2019-12-16 01:11:24

近日需要用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()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!