Ceres Solverのビルド on Windows10 + Visual Studio 2017

Ceres SolverはGoogle謹製の非線形最小二乗問題のソルバーライブラリです。
とても便利に使わせてもらってるのですが、毎回ビルドに躓くので、ビルド手順をメモっておきます。今回はCXSparseもSuiteSparseもすべて使った、盛り盛りの状態でビルドしてみようと思います。

開発環境

私の開発環境はこんな感じです。
Windows 10
CMake 3.10.0
Visual Studio 2017

依存ライブラリの入手 & ビルド

Ceres Solverは色々と依存ライブラリがあるので、まずは各種依存ライブラリを入手&ビルドします。

  1. Eigen
    公式サイトから最新安定版(現時点Eigen 3.3.5)をダウンロードします。Eigenはテンプレートライブラリなので、ビルドは不要です。
  2. gflags
    GitHubのリポジトリから最新安定版(現時点gflags 2.2.1)をダウンロードして展開 & CMakeでVisual Studio用のプロジェクトファイルを作ってビルドします。特に問題なくビルドできると思います。
    CMAKE_INSTALL_PREFIXは適時適当な場所に設定してください。
  3. glog
    GitHubのリポジトリから最新安定版(現時点glog 0.3.5)をダウンロードして展開 & CMakeとVSでビルドします。CMAKE_INSTALL_PREFIXは適時適当な場所に設定してください。
    CMakeのビルドオプションにgflags_DIRがあるので、せっかくなのでgflagsのビルドディレクトリを指定しましょう。
  4. SuiteSparse
    公式のSuiteSparseはWindowsをサポートしていません。公式サイトにはWindows使ってる人はsuitesparse-metis-for-windows使ってみてねと書いてあったので、これの最新安定版(現時 v1.4.0)をダウンロードします。CMakeは初期状態のままで問題なくビルドできると思います。SUITESPARSE_INSTALL_PREFIXは適時適当な場所に設定してください。
  5. intel TBB
    公式サイトから最新安定版(現時点Threading Building Blocks 2019)をダウンロードします。ビルド済みのバイナリが配られているので、今回はそれを使います。

Ceres Solverのビルド

最新安定版のCeres Solver(現時点1.14.0)を下記サイトの「latest stable release」といういうリンクから入手します。git cloneで入手してもよいですが、手に入るのは最新の開発版で安定していない可能性があるので、特にこだわりがなければ最新安定板の方を入手しましょう。

Installation — Ceres Solver

  1. まずはそのままCMakeのConfigureを実行してみます。CMakeのAdvancedにチェックを入れておいてください。EIGEN_INCLUDE_DIRが設定されてないよ!と怒られるので、EIGEN_INCLUDE_DIREIGEN_ROOTを設定してもう一回実行します。EIGEN_ROOTはEigenのルートディレクトリです。
  2. 一応CMakeの実行でエラーが出なくなると思います。もしglog_DIRがないと怒られたらglogのビルドディレクトリを、gflags_DIRがないと怒られたらgflagsのビルドディレクトリを指定してCMakeを実行してください。
  3. blasの設定をします。便宜上CMakeのSUITESPARSE_INSTALL_PREFIXで設定したディレクトリをSuiteSparse_INSTALLと表しています。下記を設定してConfigureを実行します。
    1. BLAS_blas_LIBRARY : SuiteSparse_INSTALL/lib64/lapack_blas_windows/libblas.lib
  4. lapackを設定します。下記を設定してConfigureを実行します。
    1. LAPACK_lapack_LIBRARY : SuiteSparse_INSTALL/lib64/lapack_blas_windows/liblapack.lib
    2. LAPACKにチェックを入れる
  5. SuiteSparse周りのCMakeオプションを設定します。下記を設定してConfigureを実行します。
    1. AMD_INCLUDE_DIR : SuiteSparse_INSTALL/include/suitesparse
    2. AMD_LIBRARY : SuiteSparse_INSTALL/lib/libamd.lib
    3. CAMD_INCLUDE_DIR : SuiteSparse_INSTALL/include/suitesparse
    4. CAMD_LIBRARY : SuiteSparse_INSTALL/lib/libcamd.lib
    5. CCOLAMD_INCLUDE_DIR: SuiteSparse_INSTALL/include/suitesparse
    6. CCOLAMD_LIBRARY : SuiteSparse_INSTALL/lib/libccolamd.lib
    7. CHOLMOD_INCLUDE_DIR: SuiteSparse_INSTALL/include/suitesparse
    8. CHOLMOD_LIBRARY : SuiteSparse_INSTALL/lib/libcholmod.lib
    9. COLAMD_INCLUDE_DIR: SuiteSparse_INSTALL/include/suitesparse
    10. COLAMD_LIBRARY : SuiteSparse_INSTALL/lib/libcolamd.lib
    11. SUITESPARSEQR_INCLUDE_DIR : SuiteSparse_INSTALL/include/suitesparse
    12. SUITESPARSEQR_LIBRARY : SuiteSparse_INSTALL/lib/libspqr.lib
    13. SUITESPARSE_CONFIG_INCLUDE_DIR : SuiteSparse_INSTALL/include/suitesparse
    14. SUITESPARSE_CONFIG_LIBRARY : SuiteSparse_INSTALL/lib/suitesparseconfig.lib
    15. METIS_LIBRARY : SuiteSparse_INSTALL/lib/metis.lib
    16. SUITESPARSE にチェックを入れる
  6. CXSparse周りのCMakeオプションを設定します。
    1. CXSparse_INCLUDE_DIR : SuiteSparse_INSTALL/include/suitesparseを設定してConfigure
    2. CXSparseにチェックを入れる
    3. CXSPARSE_INCLUDE_DIR : SuiteSparse_INSTALL/lib/libcxsparse.libを設定してConfigure
  7. intel TBB周りのCMakeオプションを設定します。便宜上TBBのダウンロードディレクトリをTBB_DIRと表記します。下記を設定してConfigureを実行します。
    1. TBB_INCLUDE_DIRS : TBB_DIR/include
    2. TBB_tbb_LIBRARY_DEBUG : TBB_DIR/lib/intel64/vc14_uwp/tbb_debug.lib
    3. TBB_tbb_LIBRARY_RELEASE : TBB_DIR/lib/intel64/vc14_uwp/tbb.lib
    4. TBB_tbb_preview_LIBRARY_DEBUG : TBB_DIR/lib/intel64/vc14_uwp/tbb_preview_debug.lib
    5. TBB_tbb_preview_LIBRARY_RELEASE : TBB_DIR/lib/intel64/vc14_uwp/tbb_preview.lib
    6. TBB_tbbmalloc_LIBRARY_DEBUG : TBB_DIR/lib/intel64/vc14_uwp/tbbmalloc_debug.lib
    7. TBB_tbbmalloc_LIBRARY_RELEASE : TBB_DIR/lib/intel64/vc14_uwp/tbbmalloc.lib
  8. CMakeのGenerateを実行。これでようやくVisual Studio 2017のプロジェクトファイルが出来上がります。
  9. 最後にVisual Studio 2017でビルドしてやればCeres Solverのビルド完了です!!

コメント