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

王林
リリース: 2023-08-25 20:25:10
転載
1209 人が閲覧しました

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('_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" それ以外の場合、ラッパー ファイルは

“Your_File_Name” + “_wrapper” + “Your_language_extension”
ログイン後にコピー

のような名前になります。つまり、サンプル ファイルが test.c の場合、ラッパー ファイルは "test_wrapper.c" になります。

Build extension

>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
….
ログイン後にコピー

つまり、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
ログイン後にコピー

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

えええええ

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

関連ラベル:
ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!