WindowsにSWIG導入
SWIG (Simplified Wrapper and Interface Generator) は、 C/C++ で書かれたプログラムやライブラリをPythonやJavaなどのスクリプト言語から使えるようにするためのツール。PybindやCythonなど、類似品もありますが、2次元の物理エンジンpybox2dがSwig依存でしたので導入。
MINGW+MSYSの導入
まずSWIGをビルドする環境を整えます。
おおよその流れはこちら ⇒ MinGW+MSYSのインストール(2014年5月) | The Textbook of RayTracing @TDU
- g++
- MinGW AutoTools(autoconf, automake)
- MYSYS ( bison / flex / tar / gzip / bzip2 / base / autoconf, automake)
は必ず必要なのでチェックを忘れないようにしましょう.
また、環境変数のPathに
の追加を忘れないように!
SWIGとPCREの準備
- Githubからswigをクローン (C:\MinGW\msys\1.0\home[ユーザー名]に展開)
- ~/Swig/直下にPCREからダウンロードしてきたtarファイルを置く (pcre-8.39.tar.gzまたはpcre-8.39.tar.bz2など)
SWIG/PCREのビルドとインストール
前項の続きから、
- “C:\MinGW\msys\1.0\msys.bat"を起動
- ~/Swig/Tools/pcre-build.shを実行し、PCREをビルド
- ~/Swig/autogen.shを実行⇒configureが生成される
- ~/Swig/configureを実行
- makeでビルド [make; make install]
$ cd ~/Swig
$ ~/Swig/Tools/pcre-build.sh
$ ~/Swig/autogen.sh
$ ./configure
$ make
$ make install
これで、C:\MinGW\msys\1.0\home[ユーザー名]\swig.exeが吐き出されるので、パスのとおる所に移せばインストール完了。 とりえあえず、C:\MinGW\binにコピーしておきました。
FAQ的な
Error: Unknown directive が出る
Error: Unknown directive ‘%exception'や Error: Unknown directive ’%pythoncode'が吐き出される場合ですが、~/Swig/Lib/の中身が参照できるところに入っていますか?
下記いずれかで直ると思います。
- make installを忘れない
- swig.exeからの相対パスが./Lib/になる場所にLib以下をコピー
- C:\MinGW\msys\1.0\local\share\swig\3.0.11以下にLibをコピー
参考の記事:// Swigが参照するパスについて
Configure中にsyntax error near unexpected token ‘fi'がでる
syntax error near unexpected token ‘fi’ · Issue #815 · swig/swig · GitHub
環境によっては出るようです。
Line 5855 and line 5975 have “else” tokens that should be removed.
とあるようにfiの直前のelseを消しましょう。空のelseがあるのが良くありません。
代替手段(2017-03-01追記)
Anacondaでもswigの準備があるようです
conda install swig
いろいろ苦労したのがコマンド1つで解決