ホームページ  >  記事  >  バックエンド開発  >  SWIG を使用して C/C++ を Python にラップする

SWIG を使用して C/C++ を Python にラップする

王林
王林転載
2023-08-25 20:25:101325ブラウズ

SWIG を使用して C/C++ を Python にラップする

既存の C または C の機能を Python でカプセル化する方法はたくさんあります。このセクションでは、SWIG を使用して C/C 機能をラップする方法を見ていきます。ここでは、Python で C/C 機能をラップするための他のオプションを示します。

  • 手動ラッピング
  • Pyrex を使用して C コードをラップします。
  • Ctypes
  • SIP
  • Boost Python

SWIG (Simple Wrapper Interface Generator) は、Perl を含む他の多くの言語で動作できます、Python、PHP、Ruby、Tcl、C#、Common Lisp (CLISP、Allegro、CL、UFFI、CFFI)、Java、Modula-3、OCAML。Swig は、複数の解釈およびコンパイルされた Scheme 実装 (Guile、MzScheme、チキン).

ただし、ここでは Python を使用した実装についてのみ説明します。

SWIG は基本的に、C コードを理解し、選択した言語のラッパー コードを吐き出すマクロ言語です。

インストール

私は「swigwin-3.0.12」Windows swig インストーラーを使用しています。

http://www.swig からダウンロードできます。 org/download.html

それに加えて、Windows で swig プログラムを実行するには、「Microsoft Visual Studio 14.0」以降も必要になる場合があります。

説明について 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" になります。

Build extension

>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

これで完了です。ファイルから関数をインポートして実行します。

えええええ

以上がSWIG を使用して C/C++ を Python にラップするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。