首页 > 后端开发 > C++ > 正文

使用SWIG将C/C++包装为Python

王林
发布: 2023-08-25 20:25:10
转载
1456人浏览过

使用swig将c/c++包装为python

有多种方法可以将现有的 C 或 C++ 功能封装在 Python 中。在本节中,我们将了解如何使用 SWIG 包装 C/C++ 功能。以下是在 python 中包装 C/C++ 功能的其他选项。

  • 手动包装
  • 使用 Pyrex 包装 C 代码。
  • Ctypes
  • SIP
  • Boost Python

SWIG(简单包装接口生成器)能够使用许多其他语言(包括 Perl、 Python、PHP、Ruby、Tcl、C#、Common Lisp(CLISP、Allegro、CL、UFFI、CFFI)、Java、Modula-3 和 OCAML。 Swig 还支持多种解释和编译的Scheme 实现(如 Guile、MzScheme、Chicken)。

但我们将在这里仅讨论其使用 python 的实现。

SWIG 基本上是一个理解 C 代码的宏语言,然后会为您选择的语言吐出包装器代码。

立即学习Python免费学习笔记(深入)”;

安装

我正在使用“swigwin-3.0.12”windows swig 安装程序,您可以从以下位置下载:

http://www.swig.org/download.html

除此之外,您可能还需要“Microsoft Visual Studio 14.0”或更高版本,在 Windows 中运行 swig 程序。

为了说明 swig 的使用,假设我们有一些 c 函数,并且我们想将其添加到其他语言,如 Tcl、Perl、Python(我是与 python 交互)、Java 和 C#。

我的 c 文件是 example.c

#include "example.h"
int fact(int n) {
   if (n < 0) {       /* This should probably return an error, but this is simpler */
      return 0;
   }
   if (n == 0) {
      return 1;
   } else {
      /* testing for overflow would be a good idea here */
      return n * fact(n-1);
   }
}
登录后复制

接口文件:

现在,如果您想将 c 文件添加到您的首选语言,您需要编写一个“接口文件”,它是 SWIG 的输入。我的 example.c 接口文件是,

example.i

/* File: example.i */
%module example
%{
   #define SWIG_FILE_WITH_INIT
   #include "example.h"
%}
%include "example.h"
登录后复制

头文件

我们已经在之前的示例文件中包含了头文件。这是我的头文件:

example.h

int fact(int n);
登录后复制

安装文件:

from distutils.core import setup, Extension
example_module = Extension('_example',
   sources=['example_wrap.c', 'example.c'],
)
setup (name = 'example',
   version = '0.1',
   author = "SWIG Docs",
   description = """Simple swig example from docs""",
   ext_modules = [example_module],
   py_modules = ["example"],
)
登录后复制

创建包装器

现在我们将使用我们的接口文件 (example.i) 创建 python 包装器。要为您的函数创建包装器,只需在 CLI 上运行以下命令即可。

>swig -python example.i
登录后复制

现在,如果您看到当前的工作目录,则刚刚创建了一个新文件。如果您使用上面的文件名作为我的,那么您的包装文件将是“example_wrap.c”,否则包装文件将被命名为类似

&ldquo;Your_File_Name&rdquo; + &ldquo;_wrapper&rdquo; + &ldquo;Your_language_extension&rdquo;
登录后复制

因此,如果您的示例文件是 test.c,那么您的包装文件将为“test_wrapper.c”。

构建扩展

>python setup.py build_ext
running build_ext
building '_example' extension
creating build
creating build\temp.win32-3.6
creating build\temp.win32-3.6\Release
&hellip;.
登录后复制

那就是现在我们可以将C语言封装到Python语言中了。要检查它,您可以直接运行或创建一个虚拟环境并分开运行。

C:\Users\rajesh>mkdir swigExample && cd swigExample
C:\Users\rajesh\swigExample>virtualenv swigenv
Using base prefix 'c:\python\python361'
New python executable in C:\Users\rajesh\swigExample\swigenv\Scripts\python.exe
Installing setuptools, pip, wheel...done.

C:\Users\rajesh\swigExample>.\swigenv\Scripts\activate

(swigenv) C:\Users\rajesh\swigExample>python
登录后复制

就是这样,现在从文件导入函数并运行它。

>>> from example import fact
>>> fact(6)
720
登录后复制

以上就是使用SWIG将C/C++包装为Python的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:tutorialspoint网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号