最近 Slam を勉強しているのですが、環境設定が本当にめんどくさいです。各ライブラリのインストールに半日かかります。最後の 14 回の講義ではまだルーチンを実行できません。ライブラリがインストールされていないのかわかりません。正しくない、またはバージョンが一貫していない、またはメイクファイルが正しく書かれていないためです。
そこで、最近インストールしたルーチンを探していたのですが、まず各ライブラリが正常にインストールされたかどうかを確認してみました。
インストールの前に、次の作業があります。ubuntu16.04 に Pangolin ライブラリをインストールする_Qianmengyu 11 のブログ - CSDN ブログ
検証では Pangolin 独自のルーチンを使用します: Pangolin/examples/HelloPangolin フォルダー
1. 端末上の対応するフォルダーを入力します。
cd Pangolin
cd examples/HelloPangolin
2. ワンストップのコンパイルと運用:
cmake .
make
./HelloPangolin
もちろん、これは理想的な状況です。make プロセス中にエラーが発生した場合は、次のようにします。
/usr/local/include/pangolin/var/varextra.h:68:52: ここから必要です
/usr/local/include/pangolin/var/varvalue.h:100:23: エラー: 'class pangolin::VarValue< bool>' には 'str' という名前のメンバーがありません
this->str = (VarValueT<std::string>*)this;
^
/usr/local/include/pangolin/var/varvalue.h:103:23: エラー: 'class pangolin::VarValue<bool>' には 'str' という名前のメンバーがありません
this->str = str_ptr;
^
CMakeFiles/HelloPangolin.dir/build.make:75: ターゲット 'CMakeFiles/HelloPangolin.dir/main.o' のレシピが
make[2] に失敗しました: *** [CMakeFiles/HelloPangolin.dir/main.o] エラー 1
CMakeFiles /Makefile2:82: ターゲット 'CMakeFiles/HelloPangolin.dir/all' のレシピが失敗しました
make[1]: *** [CMakeFiles/HelloPangolin.dir/all] エラー 2
Makefile:90: ターゲット 'all' のレシピが失敗しました
make: *** [all] エラー 2
これは CMakeLists.txt の問題であり、主に標準サポートやその他の問題に関連しています。
# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
最終的に CMakeLists.txt 全体は次のようになります。
# Find Pangolin (https://github.com/stevenlovegrove/Pangolin)
find_package(Pangolin 0.4 REQUIRED)
include_directories(${Pangolin_INCLUDE_DIRS})
add_executable(HelloPangolin main.cpp)
target_link_libraries(HelloPangolin ${Pangolin_LIBRARIES})
# Check C++11 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
多くの解決策は、単にセット (CMAKE_CXX_STANDARD 11) を変更することですが、これまでうまくいきませんでした。これは少し複雑ですが、実行できます。うまくいかない場合は、これを試してください。
結果は次のとおりです。