首頁 >後端開發 >C++ >使用SWIG將C/C++包裝為Python

使用SWIG將C/C++包裝為Python

王林
王林轉載
2023-08-25 20:25:101366瀏覽

使用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 程式碼的巨集語言,然後會為您選擇的語言吐出包裝程式碼。

安裝

我正在使用「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(&#39;_example&#39;,
   sources=[&#39;example_wrap.c&#39;, &#39;example.c&#39;],
)
setup (name = &#39;example&#39;,
   version = &#39;0.1&#39;,
   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 &#39;_example&#39; 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 &#39;c:\python\python361&#39;
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中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除