前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python调用C++代码

Python调用C++代码

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 09:29:03
2.6K0
发布2019-01-22 09:29:03
举报

Python调用C++代码

今天在研究PyTorch中Tensor的一些操作的时候,发现其底层Tensor的操作都是用C++写的,并使用pybind11进行C++和Python的桥接。所以,我就想着探索一下Python中如何调用C++代码?

可行方案

其实,方案还是挺多的:

  • Python内置的ctypes接口(可以将C/C++代码编译为动态库,在Python中进行调用)
  • CFFI(提供了一种在Python代码中混合C代码的途径)
  • Cython (C后端版本的Python实现,建立了Python类型和C语言之间的映射关系,提供了使用Python代码调用C函数库的能力)
  • Boost.Python (提供手动导出C++代码接口的能力供Python调用)
  • SWIG(不止支持C/C++到Python的桥接,SWIG支持很多语言跟C/C++的桥接,是广泛使用的一种解决方案)

Hello Word示例

感觉ctypes简单很多,对于小型程序感觉还是挺友好的,所以该篇博客介绍一下使用ctypes调用C/C++的步骤。

编写C或者C++代码

头文件(test.h)

int sum(int, int);

C++代码(test.cpp)

// Windows需要__declspec(dllexport)申明
// extern "C"指示以C语言规范进行编译
#define DLLEXPORT extern "C"
DLLEXPORT int sum(int a, int b) {
    return a + b;
}

或者C代码(test.c)

// 同样的Windows在函数前面需要__declspec(dllexport)申明
int sum(int a, int b) {
    return a + b;
}

C代码编译成动态链接库

我使用的是macOS,选择使用gcc进行编译gcc -Wall -Wextra -O -ansi -pedantic -shared test.c -o test.so

在Python中调用

In [1]: from ctypes import cdll

In [2]: mydll = cdll.LoadLibrary('test.so')

In [3]: mydll.sum
Out[3]: <_FuncPtr object at 0x10f4cf688>

In [4]: mydll.sum(5, 2)
Out[4]: 7
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python调用C++代码
    • 可行方案
      • Hello Word示例
        • 编写C或者C++代码
        • C代码编译成动态链接库
        • 在Python中调用
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档