c/c++封装成python包
2024-09-05 01:25:36
参考网址:https://blog.csdn.net/tiankongtiankong01/article/details/80420033 SWIG (Simplified Wrapper and Interface Generator) 是用来为C和C++程序构造脚本语言接口的软件开发工具。SWIG 实际上是一个编译器,获取C/C++的声明,用一个壳包起来,以便通过其他语言访问这些声明。因此,SWIG 最大的好处就是将脚本语言的开发效率和 C/C++ 的运行效率结合起来。
一:准备源文件
文件1:EncryptTool.h
int EncryptFile(const char *szInputFile, const char *szOutputFile);
int DecryptFile(const char *szInputFile, const char *szOutputFile);
文件2:EncryptTool.cpp # 属于文件1的引用文件或者说是依赖包,后面动态链接将其封装起来
#include <iostream> using namespace std; int EncryptFile(const char *szInputFile, const char *szOutputFile)
{
char str[] = "jiami"; cout << "this is : " << str << endl;
} int DecryptFile(const char *szInputFile, const char *szOutputFile)
{
char str[] = "解密函数"; cout << "我是 : " << str << endl;
}
二:编写接口文件
文件3:EncryptTool.i(接口文件)
%module EncryptTool (定义模块名)
%{
#define SWIG_FILE_WITH_INIT
#include "EncryptTool.h"
%}
%include "EncryptTool.h" # 导入源文件
1.%module后面的名字是被封装的模块名称,Python通过这个名称加载程序。
2.%{...%}之间所添加的内容,一般包含此文件需要的一些函数声明和头文件。
3.最后一部分,声明了要封装的函数和变量。
三:封装代码
swig -python -c++ EncryptTool.i 四:生成动态链接库 setup.py文件
from distutils.core import setup, Extension #生成一个扩展模块
pht_module = Extension('_EncryptTool', #swig模块引用的模块名称,必须要有下划线
sources=['EncryptTool_wrap.cxx', #封装后的接口文件
'EncryptTool.cpp', #原始代码所依赖的文件
],
) setup(name = 'EncryptTool', #打包后的名称,也是我们python导包的名字
version = '0.1', # 版本号
author = 'SWIG Docs', # 封装作者
description = 'Simple swig pht from docs', # 描述信息
ext_modules = [pht_module], #与上面的扩展模块名称一致
py_modules = ['EncryptTool'], #需要打包的模块列表
) 五:安装到我们的python环境中
安装python3环境中:sudo python3 setup.py install
安装python2环境中:sudo python setup.py install
最新文章
- windows php 5.5 执行exe 不是有效的win32程序
- Mat转换为QImage
- Java Daemon 守护线程
- Android 学习资料收集
- json转换成对象
- cocos2d 3.6 win7下的配置
- Jpinyin笔记
- Simple JavaScript Inheritance--一个极简JS面向对象-类库
- hdu 3518 (后缀数组)
- React Native学习-控制横竖屏第三方组件:react-native-orientation
- SQL Server :事务和锁
- 初探html5---Video + DOM(视频播放)
- Mysql 存储过程、函数、触发器和视图的权限检查
- java 包中的一款经典的singleton模式
- 解决Eclipse中文乱码的方法
- aop代理方式引起的spring注入bean(实现类)与获取bean(实现类)出错
- Android开发9:网络访问&;Web服务开发
- Doctype 文档类型,标准模式,混杂模式
- Java中构造方法跟普通方法的区别?
- JVM调优之JMeter使用(三)
热门文章
- 基于windows 10打造的kali工具集
- h5和native测试时的区别
- error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "long __cdecl InitD3D(struct HWND__ *)" (?InitD3D
- wc.exe个人项目
- Docker 0x08: Docker 命令
- OpenSSL 安装 (Linux系统)
- 中国网络安全行业分类及全景图2019H1
- 201871010109-胡欢欢《面向对象程序设计(java)》第四周学习总结会
- nginx 缓存服务
- CentOS7 安装 vsftpd 服务