使用Swig转C++为Python详解
Swig是一个可以使得不同语言之间可以相互调用的工具,今天记录一下使用Swig将C++转为Python的方法。
首先从官网下载Swig,官网网址www.swig.org,下载后解压压缩包,并将swig.exe的路径添加到环境变量path中,就可以使用swig了。
下面我们来准备C++代码。创建一个空项目,并创建.h文件与.cpp文件,编写代码:
#pragma once#include <iostream>using namespace std;class SwigTest
{
public:SwigTest();~SwigTest();void PrintHello();
};
#include "SwigTest.h"int main()
{}SwigTest::SwigTest()
{
}SwigTest::~SwigTest()
{
}void SwigTest::PrintHello()
{cout << "Hello World!" << endl;
}
C++程序编写完成后,我们使用swig对程序进行封装,我们需要在C++项目中创建一个.i文件,文件位置和cpp的位置相同即可,在.i文件中添加下列内容:
%module SwigTest%{
#include "SwigTest.h"
%}%include "SwigTest.h"
其中%module SwigTest 为封装名称,也就是python所调用的包名
%{%}中的内容为附加函数说明和头文件,源文件以外的部分都要包括在这里,包括头文件和宏定义等
之后为要封装的函数或类,可以直接引用头文件(若已经将要封装的部分的声明写在头文件中)
然后我们需要使用命令行,cd到目标目录后输入下面这一行:
swig -python -c++ example.i
这样就会生成两个文件
- <cpp_source>_wrap.cxx文件
- <name>.py文件
接下来我们使用distutils的setup.py继续编译
我们在同一目录下创建setup.py文件,文件内容为:
#!/usr/bin/env python
"""
setup.py file for SWIG example
"""
from distutils.core import setup, Extension
example_module = Extension('_SwigTest',
sources=['SwigTest_wrap.cxx', 'SwigTest.cpp'],
)
setup(name = "SwigTest", version = "1.0", ext_modules = [Extension("_SwigTest", ["SwigTest_wrap.cxx", "SwigTest.cpp"],extra_compile_args = ['-std=c++11'])],py_modules=['SwigTest'])
其中大部分内容为定好的框架,根据自己项目的名称修改对应部分即可。
setup.py准备好之后,我们继续在对应目录的命令行中输入:
python setup.py build_ext --inplace
cmd界面就会开始滚动屏幕进行编译了
编译完成后,我们就可以调用python的语句了,直接在对应目录下输入:
C:\Users\waynecdwei\Desktop\SwigTest\SwigTest>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import SwigTest
>>> a = SwigTest.SwigTest()
>>> a.PrintHello()
Hello World!
使用Swig转C++为Python详解相关推荐
- python input与返回值-Python 详解基本语法_函数_返回值
Python 详解基本语法 概要: 函数的返回值是函数重要的组成部分.函数的根本在于实现程序的部分功能,所以很多时候我们需要将函数执行后的结果返回给程序再由程序作出进一步的操作.可以说是函数的返回值令 ...
- python选择排序从大到小_经典排序算法和Python详解之(一)选择排序和二元选择排序...
本文源自微信公众号[Python编程和深度学习]原文链接:经典排序算法和Python详解之(一)选择排序和二元选择排序,欢迎扫码关注鸭! 扫它!扫它!扫它 排序算法是<数据结构与算法>中最 ...
- qpython能使用json吗l_[python] 详解Python在使用JSON时需要注意的编码问题
Python 中的字符编码 在 Python3 中, 字符 在内存中是使用 Unicode 存储的, 常规的字符使用 两个字节 表示, 一些很生僻的字符就需要 四个字节. 默认使用 Unicode 存 ...
- map函数的用法python,详解Python map函数及Python map()函数的用法
python map函数 map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list ...
- 名片管理系统python详解_详解Python做一个名片管理系统
详解Python做一个名片管理系统 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 详解Python做一个名片管理系统.txt ] (友情提示:右键点上行txt文 ...
- 一看就懂!【英雄联盟锐雯】与 Python 详解设计模式之门面模式
[网络配图] 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性.设计 ...
- 用 Python 详解《英雄联盟》游戏取胜的重要因素!
作者 | DeepHub IMBA 责编 | 王晓曼 介绍 在过去的几年里,电子竞技社区发展迅速,曾经只是休闲娱乐的电子竞技产业,到2022年有望创造18亿美元的收入. 虽然在这个生态系统中有很多电子 ...
- python话雷达图-Python 详解雷达图/蛛网图
雷达图-pyecharts 蛛网图,最早知道是在玩FIFA游戏的时候,球员的能力用蛛网图来表示与比较,那时觉得非常新鲜.后来,在实际的工作中,其实很少用到:一方面,直接提供蛛网图的工具少:另一方面,过 ...
- 名片管理系统python详解_Python综合应用名片管理系统案例详解
本文实例讲述了Python综合应用名片管理系统.分享给大家供大家参考,具体如下: 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 程序启动,显示名片管理系统欢迎 ...
最新文章
- SendDlgItemMessage
- 【codeforces 798A】Mike and palindrome
- jQuery源码研究01
- java stringbuffer长度限制_Java中的String、StringBuffer和StringBuilder
- linux软件包管理学习归档-2020-0624
- 算术运算导致溢出。_【S7200指令教程】数据运算指令ADD SUB MUL DIV
- python堆排序的库_Python:堆排序
- python框架之Flask(4)-上下文管理
- ServletResponse的常用方法:getWriter,setContentType
- ios使用theos tweak logify.pl自动hook .h头文件中所有的方法
- blackbox_exporter 黑盒监测
- uniapp中scroll-view的下拉刷新
- 小米路由器的服务器无响应怎么回事啊,小米路由器常见故障处理方法
- 实时获取股票数据,免费!——Python爬虫Sina Stock实战
- CloudDB——构建云化网络统一融合数据层
- 卸载kerberos
- ORACLE语句基本优化
- 不想玩大数据的厨子都不是冒险家
- webpack 打包错误
- node-sass安装失败 error D:\xxx\xxx\node_modules\node-sass: Command failed.(window + mac M1 pro)