> 백엔드 개발 > C++ > 본문

SWIG를 사용하여 C/C++를 Python으로 래핑하기

王林
풀어 주다: 2023-08-25 20:25:10
앞으로
1329명이 탐색했습니다.

SWIG를 사용하여 C/C++를 Python으로 래핑하기

Python에서 기존 C 또는 C++ 기능을 캡슐화하는 방법에는 여러 가지가 있습니다. 이 섹션에서는 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, Chicken)을 지원합니다. 하지만 여기서는 기본적으로 Python을 사용한 구현에 대해서만 설명합니다

SWIG. C 코드를 이해한 다음 선택한 언어에 대한 래퍼 코드를 생성하는 매크로 언어

Installation

저는 다음에서 다운로드할 수 있는 "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"
로그인 후 복사

Header 파일

입니다. 이전 예제 파일에 헤더 파일이 포함되어 있습니다. 다음은 내 헤더 파일입니다:

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"],
)
로그인 후 복사

Creating the Wrapper

이제 인터페이스 파일(example.h)을 사용하여 Python 래퍼를 만듭니다. i) 함수에 대한 래퍼를 만들려면 CLI에서 다음 명령을 실행하세요.

>swig -python example.i
로그인 후 복사

이제 현재 작업 디렉터리가 표시되면 위의 파일 이름을 내 것으로 사용하면 랩 파일이 생성됩니다. 그렇지 않으면 랩 파일 이름이

&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
로그인 후 복사

이제 파일에서 함수를 가져와서 실행해 보세요.

rreee

위 내용은 SWIG를 사용하여 C/C++를 Python으로 래핑하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿