Pangolin的使用


  Pangolin 是一個可用於SLAM可視化的openGL庫。目前有很多SLAM系統都用它作為可視化的工具。它的編譯與安裝過程問題不大,依賴也比較少。但最近我在單獨使用它的時候,碰到了很奇怪的現象:我單獨將HelloPangolin這個example以及它的CMakelists.txt取出來,通過cmake,build的方式去編譯,報了一堆錯:

In file included from /home/lenovo/Pangolin/include/pangolin/var/var.h:34:0,
from /home/lenovo/Pangolin/include/pangolin/var/varextra.h:31,
from /home/lenovo/Pangolin/include/pangolin/pangolin.h:52,
from /home/lenovo/expangolin/main.cpp:1:
/home/lenovo/Pangolin/include/pangolin/var/varvalue.h: In instantiation of ‘void pangolin::VarValue::Init() [with T = bool]’:
/home/lenovo/Pangolin/include/pangolin/var/varvalue.h:55:14: required from ‘pangolin::VarValue::VarValue(const T&) [with T = bool]’
/home/lenovo/Pangolin/include/pangolin/var/var.h:170:20: required from ‘pangolin::Var::Var(const string&, const T&, bool) [with T = bool; std::string = std::basic_string]’
/home/lenovo/Pangolin/include/pangolin/var/varextra.h:67:52: required from here
/home/lenovo/Pangolin/include/pangolin/var/varvalue.h:99:23: error: ‘class pangolin::VarValue’ has no member named ‘str’
this->str = (VarValueTstd::string*)this;
^
/home/lenovo/Pangolin/include/pangolin/var/varvalue.h:102:23: error: ‘class pangolin::VarValue’ has no member named ‘str’
this->str = str_ptr;

  出現這種錯誤,意味着Pangolin庫的路徑是能夠被找到的,但通過這個庫編譯example的時候,出現了問題。這個問題困擾了很久,最終我通過對比ORB-SLAM2中的CMakeLists.txt才發現,需要通過CMake加上C++11 或者C++0x的support,最終編譯pangolin的example的CMakeLists.txt 如下:

cmake_minimum_required(VERSION 2.8)
project(HelloPangolin)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 -march=native")

# 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()

find_package(Pangolin REQUIRED)

include_directories(${Pangolin_INCLUDE_DIRS})

# Build examples
add_executable(test main.cpp)
target_link_libraries(test ${Pangolin_LIBRARIES})
CMakeLists.txt

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM