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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangbowj123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值