python/c++SWIG c++をpython呼び出し可能なsoライブラリにカプセル化

7358 ワード

SWIGは、c/c++にスクリプト言語インタフェースを提供し、複数の言語(Perl、PHP、Python、Tcl、Ruby、PHP)をサポートするインタフェースコンパイラです.
インストール
#linux
apt-get install swig

コマンドステップ
#  example.cpp      example.i(       )
#swig   example.i c++      ,  example.py,example_wrap.cxx
swig -c++ -python example.i
#       
g++ -fpic -c example.cpp
g++ -fpic -I/usr/include/python2.6 -c example_wrap.cxx
g++ -shared example_wrap.o -o example.so

一部のチュートリアルではswigでexample_を生成するwrap.cxxとexample.pyファイルの後、distutilsを使用してダイナミックライブラリを生成します.参照:https://blog.csdn.net/u013378306/article/details/70172076

知识点补充:.cppファイル:g++(gnuのc++コンパイラ).cファイル:gcc(gnuのcコンパイラ)[関連パラメータ詳細]-cは、前処理、コンパイル、アセンブリのみをアクティブにします.つまり、プログラムをobjファイル-shareにして共有ターゲットファイルを生成します.通常、共有ライブラリの作成時に使用されます.-o FILEは指定された出力ファイルを生成します.実行可能ファイルを生成するときに使用します.-fPICは位置に関係なくターゲットコードを生成し、gnuを動的に接続するのに適しています.https://www.cnblogs.com/942267027wzmblog/p/6150218.html

関連コード
公式サイトの例はcで、思想を学ぶのが主です
 /*    */
 /* File : example.c */
 
 #include 
 double My_variable = 3.0;
 
 int fact(int n) {
     
     if (n <= 1) return 1;
     else return n*fact(n-1);
 }
 
 int my_mod(int x, int y) {
     
     return (x%y);
 }
 	
 char *get_time()
 {
     
     time_t ltime;
     time(&ltime);
     return ctime(&ltime);
 }

swigにインタフェースファイルを書きます:example.i、インタフェース作成規則を定義する:
  • まず%moduleの後にモジュール名を宣言します.これがPythonがimportで使用するモジュール名です.
  • %{...%}の間には、このファイルに必要な関数宣言とヘッダファイルが一般的に含まれています.
  • %includeの後にSTLのサポート
  • を宣言できます.
  • 最後にカプセル化する関数と変数を宣言します.ヘッダファイル:%include"trie.h"
  • を直接含めることもできます.
    /* example.i */
     %module example
     %{
         
     /* Put header files here or function declarations like below */
     extern double My_variable;
     extern int fact(int n);
     extern int my_mod(int x, int y);
     extern char *get_time();
     /*include "time.h"*/
     %}
     
     extern double My_variable;
     extern int fact(int n);
     extern int my_mod(int x, int y);
     extern char *get_time();
     /*include "time.h"*/
    

    参考:swig公式サイトhttp://www.swig.org/tutorial.html 学習ノート:swig+用SWIGパッケージC++をPythonモジュール+SWIG使用説明https://www.cnblogs.com/amiza/p/10340846.html SWIG実現Pythonパッケージ呼び出しC/C++コードhttp://cering.github.io/2015/12/08/%E4%BD%BF%E7%94%A8SWIG%E5%AE%9E%E7%8E%B0Python%E8%B0%83%E7%94%A8CC-%E 4%BB%A 3%E 7%A 0%81/SWIGでC++ライブラリをPython包装(強力な告白!入門は本当にこの文章で読めます)https://segmentfault.com/a/1190000013219667