MacではSWIGを使用してPythonでCのピットレコードを呼び出す


Mac上SWIG踏み込み記録
インストール
brew/anaconda/ソースコードをダウンロードして自分でコンパイルするなどの方法があります.このチュートリアルには、各プラットフォームに対する詳細なインストール手順があります.Mac運転brew install swigでOK

サボって、直接使う公式文書の例
  • は、呼び出す必要がある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 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();
     %}
     
     extern double My_variable;
     extern int fact(int n);
     extern int my_mod(int x, int y);
     extern char *get_time();
    
  • 構築PythonモジュールUnixシステム下入力:
  • swig -python example.i
    gcc -c example.c example_wrap.c \
            -I/usr/local/include/python2.7
    ld -shared example.o example_wrap.o -o _example.so 
    
  • 第3ステップの代替案をMacでコンパイルする際、Python環境などの問題で参照するヘッダファイルが見つからず、コマンド入力が面倒になるので、ここではこの回答c-Pythonを参照する.h not found using swig and Anaconda Python-Stack Overflowはdistutilsを用いて生成する.

  • まずsetupを作成します.pyファイル、例は次のとおりです.
        # setup.py
        
        from distutils.core import setup, Extension
        
        
        example_module = Extension('_example', sources=['example_wrap.c', 'example.c'])
        
        setup(name='example', ext_modules=[example_module], py_modules=["example"])
    

    そしてコマンドpython setup.py build_ext --inplaceを用いるコンパイルすればよい.あとは楽しくimport exampleできます!
    Over.
    ブログやリソース
  • SWIGを利用してC++ライブラリをPythonパッケージ-個人記事-SegmentFault思否の良い例(翻訳された公式ドキュメント233に似ている)ですが、SWIGはC++のサブセット
  • しかサポートしていません.
  • SWIGでPythonにC++里STLの容器・零壹軒・ノート
  • を提供
  • SWIGを使用してPython呼び出しC/C++コード|ホワイトコード羊堂を実現するこれは主にCに対して、例は比較的に細かく、全体の流れははっきりしている
  • SWIGはC/C++のAPIに対してPython呼び出しインタフェースを生成する基礎|WalkerTalkingの非常に詳細な例であり、SWIGの原理についても説明し、著者らはC++とSWIGの結合について多くの試みを行い、参考にすることができる.
  • c - Python.h not found using swig and Anaconda Python-Stack Overflow MacでのSWIG使用に関するコマンドを詳しく紹介しましたが、この回答者は天使です!
  • SWIGコンパイルオプションpython-How may I override the compiler(gcc)flags that setupを設定.py uses by default? - Stack Overflow clangではなくgccを使う場合は端末にCC=gcc-8
  • と入力.