Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Membungkus C/C++ ke dalam Python menggunakan SWIG

Membungkus C/C++ ke dalam Python menggunakan SWIG

王林
王林ke hadapan
2023-08-25 20:25:101265semak imbas

Membungkus C/C++ ke dalam Python menggunakan SWIG

Terdapat banyak cara untuk merangkum fungsi C atau C++ sedia ada dalam Python. Dalam bahagian ini, kita akan melihat cara menggunakan SWIG untuk membungkus fungsi C/C++. Berikut ialah pilihan lain untuk membungkus fungsi C/C++ dalam python.

  • Pembungkusan manual
  • Gunakan Pyrex untuk membalut kod C.
  • Ctypes
  • SIP
  • Boost Python

SWIG (Simple Wrapper Interface Generator) mampu menggunakan banyak bahasa lain termasuk Perl, Python, PHP, Ruby, Tcl, C#, Common Lisp (CLISP, Allegro , UFFI , CFFI), Java, Modula-3 dan OCAML juga menyokong pelaksanaan Skim yang ditafsir dan disusun (seperti Guile, MzScheme, Chicken

Tetapi kami hanya akan membincangkan pelaksanaannya menggunakan python

SWIG bahasa makro yang memahami kod C dan kemudian mengeluarkan kod pembalut untuk bahasa pilihan anda

Pemasangan

Saya menggunakan pemasang windows swig "swigwin-3.0.12" yang boleh anda muat turun daripada:

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

Selain itu, anda juga mungkin memerlukan "Microsoft Visual Studio 14.0" atau lebih tinggi untuk menjalankan program swig dalam Windows

Untuk arahan menggunakan swig, katakan kami mempunyai beberapa c fungsi dan kami ingin menambahkannya ke bahasa lain seperti Tcl, Perl, Python (saya berinteraksi dengan python), Java dan C#

Fail c saya ialah contoh.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);
   }
}

Fail Antaramuka:

Sekarang, jika anda ingin menambah fail c pada bahasa pilihan anda, anda perlu menulis "fail antara muka" yang merupakan input kepada fail antara muka contoh.c saya ialah,

contohnya termasuk fail pengepala dalam fail contoh sebelumnya. Berikut ialah fail pengepala saya:

example.h

/* File: example.i */
%module example
%{
   #define SWIG_FILE_WITH_INIT
   #include "example.h"
%}
%include "example.h"

Fail pemasangan:

int fact(int n);

Mencipta pembungkus

Sekarang kita akan. i). Untuk membuat pembungkus untuk fungsi anda, jalankan sahaja arahan berikut pada CLI

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"],
)

Sekarang jika anda melihat direktori kerja semasa Hanya mencipta fail baharu Jika anda menggunakan nama fail di atas, maka fail bungkus anda akan menjadi "example_wrap.c" jika tidak fail bungkus akan dinamakan seperti

>swig -python example.i

Jadi jika fail contoh anda ialah test.c, maka fail pembalut anda akan menjadi "test_wrapper.c". itu. Sekarang kita boleh membungkus bahasa C ke dalam bahasa Python Untuk menyemaknya, anda boleh terus menjalankan atau mencipta satu persekitaran maya dan dijalankan secara berasingan.

&ldquo;Your_File_Name&rdquo; + &ldquo;_wrapper&rdquo; + &ldquo;Your_language_extension&rdquo;

Itu sahaja, sekarang import fungsi daripada fail dan jalankannya.

rreeee

Atas ialah kandungan terperinci Membungkus C/C++ ke dalam Python menggunakan SWIG. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam