質問: SLAM (Simultaneous Localization and Mapping)技術の一つとして、SfM (Structure from Motion) があります。そして、そのライブラリがOpenCVにあり、そのサンプルコードtrajectory_reconstrucion.cppを試してみました。 【参照URL】 https://qiita.com/ChaoticActivity/items/178d23508b92a09e59ea https://qiita.com/fujin/items/d7ec313a33f9195bd2e0 必要なライブラリをインストールしてからOpenCVをインストールして、サンプルコードを次のコマンドラインでビルドしようとしたら、下記エラーが生じました。 【コマンドライン】 ``` g++ trajectory_reconstruction.cpp -std=c++11 -O4 -Wall -I/usr/local/include -I/usr/include/eigen3 -DCERES_FOUND=1 -L/usr/local/lib `pkg-config --libs opencv` -o trajectory_reconstruction ``` 【エラーメッセージ】 ``` /tmp/ccmgKuHS.o: 関数 `main' 内: trajectory_reconstruction.cpp:(.text.startup+0x2ad): `cv::sfm::reconstruct(cv::_InputArray const&, cv::_OutputArray const&, cv::_OutputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, bool)' に対する定義されていない参照です collect2: error: ld returned 1 exit status Makefile3:16: ターゲット 'trajectory_reconstruction' のレシピで失敗しました make: *** [trajectory_reconstruction] エラー 1 ``` ちなみに、eigen3とCERESのインストールは成功しています。 サンプルプログラムは他に2つありますが、同じ結果です。 どなたか、原因と対策のわかる方よろしくお願いします。 環境は次のとおりです。 ・ubuntu16.04 ・OpenCV3.4 ・C++11 (追記) OpenCVをビルドしたときのcmakeコマンドラインです。 ``` cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4.1 -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules .. ``` コード ```
回答: 自分でアプリをビルドできたわけではないので、あくまでオプションを見て気になった点を述べますが、opencvのインストールprefixが/usr/local/opencv4.1ならビルドオプションに-I/usr/local/opencv4.1/includeを入れないといけない気がしますね。