Volo di notte

お勉強の成果メモや日常のこと

WindowsにSWIG導入

SWIG (Simplified Wrapper and Interface Generator) は、 C/C++ で書かれたプログラムやライブラリをPythonJavaなどのスクリプト言語から使えるようにするためのツール。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の準備

  1. Githubからswigをクローン (C:\MinGW\msys\1.0\home[ユーザー名]に展開)
  2. ~/Swig/直下にPCREからダウンロードしてきたtarファイルを置く (pcre-8.39.tar.gzまたはpcre-8.39.tar.bz2など)

SWIG/PCREのビルドとインストール

前項の続きから、

  1. “C:\MinGW\msys\1.0\msys.bat"を起動
  2. ~/Swig/Tools/pcre-build.shを実行し、PCREをビルド
  3. ~/Swig/autogen.shを実行⇒configureが生成される
  4. ~/Swig/configureを実行
  5. 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/の中身が参照できるところに入っていますか?
下記いずれかで直ると思います。

  1. make installを忘れない
  2. swig.exeからの相対パスが./Lib/になる場所にLib以下をコピー
  3. C:\MinGW\msys\1.0\local\share\swig\3.0.11以下にLibをコピー

参考の記事:// Swigが参照するパスについて

SWIG Library

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つで解決