SWIG
SWIG![]() |
원저작자 | 데이비드 M.비즐리 |
---|---|
개발자 | SWIG 개발자 |
초기 릴리즈 | 1996년 2월, [1] | 전(
안정된 릴리스 | 4.0.2 / 2020년6월 [2] , 전( |
저장소 | |
기입처 | C, C++ |
면허증. | GPLv3 |
웹 사이트 | swig |
SWIG(Simplified Wrapper and Interface Generator)는 C 또는 C++로 작성된 컴퓨터 프로그램 또는 라이브러리를 Lua, Perl, PHP, Python, R, Ruby, Tcl 등의 스크립트 언어 및 C#, Java, JavaScript, Go, SCam, Ocabe와 같은 기타 언어와 연결하는 데 사용되는 오픈 소스 소프트웨어 도구입니다.출력은 XML 형식일 수도 있습니다.
기능.
목적은 다른 프로그래밍 언어에 의한 네이티브 함수(C 또는 C++로 작성된) 호출, 복잡한 데이터 유형 전달, 부적절한 메모리 해방 방지, 언어 간 객체 클래스 상속 등을 가능하게 하는 것입니다.프로그래머는 인터프리터가 볼 수 있도록 C/C++ 함수의 목록을 포함하는 인터페이스 파일을 쓴다.SWIG는 인터페이스 파일을 컴파일하여 일반 C/C++ 및 타깃 프로그래밍 언어로 코드를 생성합니다.SWIG는 단순한 인수를 가진 함수에 대한 변환 코드를 생성합니다. 복잡한 유형의 인수에 대한 변환 코드는 프로그래머에 의해 작성되어야 합니다.SWIG 도구는 C/C++와 타깃 언어 간의 접착을 제공하는 소스 코드를 생성합니다.언어에 따라 이 접착제는 두 가지 형태가 있습니다.
- 기존 인터프리터가 확장 모듈의 어떤 형태로든 링크할 수 있는 공유 라이브러리 또는
- 대상 언어로 컴파일된 다른 프로그램과 링크할 수 있는 공유 라이브러리(예를 들어 Java Native Interface(JNI; Java 네이티브 인터페이스) 사용)
SWIG는 네이티브코드로 해석된 함수를 호출하는 데 사용되지 않습니다.이것은 프로그래머가 수동으로 실행해야 합니다.
예
SWIG는 C 프로그램에서 선언이 사용되는 방식과 거의 일치하는 인터페이스를 생성하여 단순한 C 선언을 래핑합니다.예를 들어, 다음의 인터페이스 [3]파일에 대해 생각해 보겠습니다.
%parames(%pause) 예 %parames(%pause) %{ 외부 이중으로 하다 죄(이중으로 하다 x); 외부 인트 스트램프(컨스턴트 차 *, 컨스턴트 차 *); 외부 인트 푸우; %} #상태 50의 정의 # 버전 1.1의 정의
이 파일에는 두 가지 기능이 있습니다.sin()
그리고.strcmp()
, 글로벌 변수Foo
, 및 2개의 상수STATUS
그리고.VERSION
SWIG가 확장 모듈을 만들 때 이러한 선언은 스크립트 언어 함수, 변수 및 상수로 각각 액세스할 수 있습니다.Python의 경우:
>>>예.죄(3) 0.141120008 >>>예.스트램프('데이브',마이크) -1 >>>인쇄물(예.카바.푸우) 42 >>>인쇄물(예.상황) 50 >>>인쇄물(예.버전) 1.1
목적
두가지 주된 이유가 기존 C/C++ 프로그램에서 스크립트 엔진을 투입시키기로: 있다.
- 그 프로그램이 훨씬 더 빨리, C/C++이 아닌 스크립트 언어를 통해 사용자 지정할 수 있다.그래서 그들이 영화 대본 쓰는 일로 일반적인 작업을 자동화할 수 있는 스크립트 엔진을 최종 사용자에게 전달, 포함될 수 있다.
- 비록 최종 제품은 스크립트 엔진을 함유하지 않다, 그럼에도 불구하고 매우 시험 스크립트를 쓰기 위해 유용할 수 있다.
다음과 같습니다 여러가지가 있는 현존하는 통역사로 로드될 수 있동적 라이브러리를 만들 있는데,.
- 는 스크립트 언어에 없고 있는 C/C++ 도서관에 대한 액세스를 제공한다.
- 는 스크립트 언어 처음에 탐사 후에, C또는 C++에서performance-critical 코드를 다시 쓰려 전체 프로그램을 쓰시오.
역사
SWIG C와 C++에서의 공개적으로 1996년 2월 이후부터 이용 가능했다 쓴 것이다.초기 작가이자 주요 개발자 데이비드 맥도웰이었다Beazley는 동안 로스 알라모스 국립 연구소와 유타 대학에는 대학원생으로서, 근무 중 SWIG을 개발하는 동안 시카고 대학의 교수진에서.개발 현재 자원 봉사자들의 능동적인 그룹 윌리엄 풀턴에 의해 지원된다.SWIG은 GUN제너럴 퍼블릭 라이센스로 출시되었다.
구글 서머 오브 코드
SWIG는 2008년, 2009년, 2012년에 Google Summer of Code에 성공적으로 참여했습니다.2008년에 SWIG는 4개의 슬롯을 취득했습니다.Haoyu Bai는 여름을 SWIG의 Python 3.0 백엔드에서 보냈고, Jan Jezabek은 COM 래퍼 생성 지원에, Cheryl Fale은 SWIG의 Comment 'Translator'에, Maciej Drwal은 C 백엔드에서 일했다.2009년 SWIG는 Google Summer of Code에 다시 참여했습니다.이번에는 4명의 학생이 참가했다.Baozeng Ding은 Scilab 모듈에서 일했다.Matevz Jekovec은 C++0x 기능에 시간을 할애했습니다.Ashish Sharma는 Objective-C 모듈에서 여름을 보냈고, Miklos Vajna는 PHP 디렉터에서 시간을 보냈다.
2012년 SWIG는 Google Summer of Code에 참여했습니다.이번에는 학생 5명 중 4명이 성공적으로 프로젝트를 마쳤다.Leif Middelschulte는 C 타깃 언어 모듈에서 일했다.Swati Sharma는 Objective-C 모듈을 확장했습니다.Neha Narang은 JavaScript에 새로운 모듈을 추가했다.Dmitry Kabak은 소스 코드 문서화와 Doxygen 코멘트를 작성했습니다.
대체 수단
Python의 경우 SIP와 Boost's Boost에 의해 유사한 기능이 제공됩니다.python 라이브러리.
SWIG를 사용한 프로젝트
「 」를 참조해 주세요.
- 언어 바인딩
- 외부 기능 인터페이스
- 호출 규칙
- 이름 망글링
- 응용 프로그램 프로그래밍 인터페이스
- 응용 프로그램 바이너리 인터페이스
- 응용 프로그램 가상 시스템 비교
- 래퍼 기능
- SWIG와 반대되는 GIWS: C/C++에서 Java 호출
레퍼런스
추가 정보
- 기사: Victor Volkman의 "Quick SWIG를 사용하여 C/C++ 프로그램의 내부 API 공개"
- Michael Fötsch의 기사 "SWIG를 사용한 Python Extensions In C++"
- Klaus Kampf의 프레젠테이션 "open SUSE 어플리케이션 개요"