2013年11月12日火曜日

QtはMinGWのgcc4.8.1ではコンパイルできない

参考:https://qt-project.org/forums/viewthread/33370/
参考:http://stackoverflow.com/questions/18739688/compile-time-error-from-a-qt-file-expected-unqualified-id-before-token

ひとつはMinGWのバグのせい。io.hのoff64_t_を_off64_tに置換すれば解決する。
もうひとつはQtのバグのせい。MemoryBarrierという名前がWindowsのものとQtのものとで競合するため。Qt5.1.2とQt5.2では修正される予定。

しょうがないのでQt5.1.2か5.2がリリースされるまではQtをソースからビルドする場合にはQt4.8.5を使おう。
やり方は以下に以前書いた。
http://wirelessia-liberation.blogspot.jp/2012/12/windows764bitmingw-gcc47-qtsdk484.html

Qt4.8.5も無理でした。MinGWのバグのようです。
結局バイナリインストーラを使うしかないのか……

既にあるMinGW+Msys環境からMsysGitを使うシンプルなやり方

WindowsでGitを使おうとするとたいていMsysGitを使うことになるのだけれど、MsysGitにはMinGWが付属していて、既にMinGW環境がある場合にはちょっとややこしいことになる。
できれば既にあるMinGW環境でGitを使えるようにしたい。
mingw-getで入ればいいのだけれど、少なくともこの記事を書いている現在はできない。

参考:http://sourceforge.net/p/mingw/feature-requests/127/

上のリンクにすべて書いてあるけれど、改めてきちんと書き出してみる。

MsysGitをインストールする。Msysからしか使わない場合は最小構成でOK。
Program Files/MsysGit/bin/の中にあるmsys-1.0.dllを削除する。(削除しなかった場合は後述)
Windowsシステムの環境変数のPATHの末尾(というかMinGW/binより後)にProgram Files/MsysGit/binを突っ込む。

これで既にあるMinGW環境からgitコマンドが使えるようになる。
ただしgit commitでvimが起動しないのでgit commit -mで使うしかないようだ……
msys-1.0.dllを削除しないでおくとvimが起動しないままストップし、削除しておくとプロシージャエントリポイントが云々のエラーが出る。

2013年10月16日水曜日

C++11の高速フーリエ変換ライブラリ「Fftk」

をつくりました。
あまり最適化はしていないので他のFFTライブラリのほうがおそらく高速ですが、実装はシンプルだと思います。
以下にMITライセンスで公開します。
Fftk:https://github.com/okdshin/Fftk

参考:nursの日記:http://d.hatena.ne.jp/nurs/20130617/1371483633

2013年10月8日火曜日

OpenCVのVideoCaptureのバグ?

cv::VideoCaptureである特定のAVIファイルを再生しようとするとSIGSEGVエラーが起こる。
この場合は、cv::VideoCapture::setメソッドで以下のように開始フレームを0にしてからフレームを取得するようにすると解決することがある。
cap.set(CV_CAP_PROP_POS_FRAMES, 0);

参考:http://code.opencv.org/issues/3030

2013年9月5日木曜日

OpenCV2.4 + Windows7 + MinGW + msys で staticライブラリの自前ビルドとアプリケーションへのリンク


staticライブラリの自前ビルド
 まずMinGW用のMakefileをつくる。
  • cmakeを本家(http://www.cmake.org/)からダウンロードする。(windows用のバイナリインストーラでさくっとインストールするのが楽)
  • OpenCV2.4のソースファイルを本家(http://opencv.org/)からダウンロードしてきてCドライブ直下に展開する。
  • cmake-guiを起動する。
  • BrouseSourceボタンで展開したOpenCV2.4のディレクトリ(デフォルトだとc\:opencv)をセットする。
  • BrouseBuildボタンでビルド先のディレクトリ(ここではc\:OpenCV2.4MinGWとする)をセットする。
  • 今回はstaticライブラリをビルドしたいのでBUILD_SHARED_LIBSのチェックを外す。(Searchでsharedと入力するとすぐ出てくる)
  • Configureボタンを押す。
  • "MSYS Makefiles"を選択して"Specify native compilers"にチェックをつける。
  • Nextボタンを押して、CにはMinGW/bin/gcc.exeをセットし、C++にはMinGW/bin/g++.exeをセットする。(Fortranは何もセットしなくてOK)
  • Finishボタンを押す。
  • 再度Configureボタンを押す。
  • Generateボタンを押す。

 これでc\:OpenCV2.4MinGWにMinGW用のMakefileがつくられる。

 次にMinGWでMakeしてライブラリをビルドする。

  • MinGWのShellを起動する。
  • 起動したShellで以下のコマンドを入力する。
cd c\:OpenCV2.4MinGW && mingw32-make && mingw32-make install

 これでビルドが開始される。ビルドにはしばらく時間がかかるので終わるまで待つ。(makeするときに-j2とか-j4とかしてもよいかもしれない)

アプリケーションへのリンク
 mingw32-g++でコンパイルするときは、C:/OpenCV2.4MinGW/libとC:\OpenCV2.4MinGW\3rdparty\libが参照できるようにし、必要なライブラリをリンクする。

 リンクするライブラリの順番によってはundefinedエラーが起こるので、そこらへんは試行錯誤するか、調べるかして解決する。ちなみに以下のコンパイルオプションだとうまくコンパイルできた。

-LC:/OpenCV2.4MinGW/lib -lopencv_imgproc246 -lopencv_core246 -lopencv_highgui246 -LC:/OpenCV2.4MinGW/3rdparty/lib -llibjpeg -llibtiff -llibpng -llibjasper -lIlmImf 
 アプリケーションの利用するOpenCVのライブラリによっては他のライブラリ(libopencv_video246.aなど)が必要になることがあるので、その場合は適宜調べて追加すること。


インクルードパスにOpenCV2.4MinGW中のinstallディレクトリを追加しておくこと。

2013年8月2日金曜日

C++11向けパックラットパーサジェネレータライブラリ「Parsia」

C++11用のパックラットパーサジェネレータライブラリを書きました。
「Parsia」https://github.com/okdshin/Parsia

PEGがあれば構文解析器を簡単につくることができます。