东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5003|回复: 1
打印 上一主题 下一主题

[课堂笔记] swig方式案例(py的distutils编译):python调用c/c++

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14429
QQ
跳转到指定楼层
楼主
发表于 2020-10-19 16:10:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


python中调用c/c++代码的使用Demo


首先准备c++的文件:test_post.h    test_post.cpp
开始编写test_post.i文件


*.i文件的语法:
%module 后面的名字是被封装的模块名称。封装口,python通过这个名称加载程序
%{  %}之间所添加的内容,一般包含此文件需要的一些函数声明和头文件。
最后一部分,声明了要封装的函数和变量,直接使用%include 文件模块头文件直接包含即可


  1. %module test_post
  2. %{
  3.   #define SWIG_WITH_INIT
  4.   #include "test_post.h"
  5. %}


  6. %include "test_post.h"
复制代码



执行
swig -python -c++ test_post.i
会生成:模块名.py和模块名_warp.cxx 两个文件


开始编写setup.py文件
  1. # -*- coding: utf-8 -*-
  2. __author__ = u'东方老师 微信:dfy_88888'
  3. __date__ = '2020/10/19 下午3:33'
  4. __product__ = 'PyCharm'
  5. __filename__ = 'setup'

  6. from distutils.core import setup, Extension
  7. import numpy
  8. import os

  9. # os.environ['CC'] = 'g++';

  10. # Extension('_pafprocess', ['pafprocess.cpp', 'pafprocess.i'],
  11. #                   swig_opts=['-c++'],
  12. #                   depends=["pafprocess.h"],
  13. #                   include_dirs=[numpy.get_include(), '.'])
  14. # 生成一个扩展模块 模块名称,必须要有下划线
  15. my_module = Extension(name='_test_post',
  16.                       sources=['test_post.cpp', 'test_post_wrap.cxx'],
  17.                       swig_opts=['-c++'])

  18. setup(name='test_post',
  19.       version='1.0',
  20.       author='jjj',
  21.       description='jjj_desc',
  22.       ext_modules=[my_module],
  23.       py_modules=["test_post"])
复制代码

利用python提供的自动化编译模块进行编译。编写一个文件setup.py
执行
python3 setup.py build_ext --inplace


最终生成了一个_test_post.cpython-36m-x86_64-linux-gnu.so 库文件


开始验证:
python3
import test_post
test_post.add(2,3)
test_post.sub(10,8)


swig.png (131.94 KB, 下载次数: 125)

swig.png

test_post.h

43 Bytes, 阅读权限: 10, 下载次数: 1

test_post.cpp

111 Bytes, 阅读权限: 10, 下载次数: 1

让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

100

帖子

236

积分

2W人工智能培训

Rank: 10Rank: 10Rank: 10

积分
236
沙发
发表于 2020-11-10 19:52:16 | 只看该作者
积分积分法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-4-20 20:26 , Processed in 0.183764 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表