非線形最小化ライブラリ Ceres Solverの利用について(Windows+Visual Studio 2012)
・ライブラリの準備
基本的には、このページの手順にしたがって進めていくと問題なくコンパイルできました。
  1. 以下のフィアルをダウンロード
  2. gflags, glogs, CXSparseのライブラリを生成
    ダウンロードしたファイルを展開すると、それぞれのフォルダにVisual Studioのソリューションファイルがあるので、これを開いてビルド。参考にしたページに書かれているようなソースコードの修正は必要ありませんでした。
  3. CMakeをつかってCeres Solverのソリューションファイルを生成
    ソースコードの位置をceres/ceres-solver-1.8.0に設定し、バイナリ生成のためのフォルダをceres/ceres-solver/buildのように設定する。設定後、gflags, glogs, CXSparse, Eigen3のヘッダファイルの場所、ライブラリを以下のように指定し、configure, generateするとソリューションファイルが生成される。
    • EIGEN_INCLUDE_DIRにEigenへのパス
    • GFLAGS_INCLUDE_DIRにgflags-2.0\src\windows
    • GFLAGS_LIBRARYに2.で生成したlibgflags.lib
    • GLOG_INCLUDE_DIRにglog-0.3.3\src\windows
    • GLOG_LIBRARYに2.で生成したlibglog.lib
    • CXSPARSE_INCLUDE_DIRにcxsparse\Include
    • CXSPARSE_LIBRARYに2.で生成したCXSparse.lib
  4. 生成されたソリューションファイルを開き、ceresプロジェクトのプロパティでConfigurationをAll Configurationsにし、C/C++中のPreprocessorの項目でGLOG_NO_ABBREVIATED_SEVERITIESを追加
  5. バッチビルドでALL_BUILDの項目にチェックを入れてビルド。成功するとbuild/libの中にceres.libが生成される。
追記:上記の方法では、Suite Sparseのオプションがオンになっていないので、Suite Sparseを利用したい場合には2.の段階でSuite Sparseのライブラリを準備する必要がある。Suite Sparseのライブラリ生成には、以下のリンクにあるAll-in-one packageを利用すると簡単。
あとは、CMakeでCeres solverのソリューションファイルを生成するための設定で、lapackのオプションをオンにしlapack、blasをリンク。その後、Suite Sparseのオプションをオンにし生成した各種ライブラリおよびヘッダを設定する(TBBの設定も必要だったかも)。これが終わったらgenerateしてビルドするCeres solverのライブラリが生成される。