Estou aprendendo Slam recentemente e configurar o ambiente é realmente uma dor de cabeça. Demora meio dia para instalar cada biblioteca. Nas últimas quatorze aulas as rotinas ainda não podem ser executadas. Não sei se a biblioteca não está instalada corretamente ou porque a versão é inconsistente ou o makefile não está escrito corretamente.
Então, eu estava procurando rotinas após a instalação recente. Primeiro tentei ver se cada biblioteca foi instalada com sucesso.
Antes da instalação, existem: Instalando a biblioteca Pangolin no blog ubuntu16.04_Qianmengyu 11-blog CSDN
A verificação usa a rotina própria do Pangolin: pasta Pangolin/examples/HelloPangolin
1. Entre na pasta correspondente no terminal:
cd Pangolin
cd examples/HelloPangolin
2. Compilação e operação completas:
cmake .
make
./HelloPangolin
Claro, esta é a situação ideal. Se você encontrar um erro durante o processo de criação:
/usr/local/include/pangolin/var/varextra.h:68:52: necessário daqui
/usr/local/include/pangolin/var/varvalue.h:100:23: erro: 'class pangolin::VarValue< bool>' não tem nenhum membro chamado 'str'
this->str = (VarValueT<std::string>*)this;
^
/usr/local/include/pangolin/var/varvalue.h:103:23: erro: 'class pangolin::VarValue<bool>' não tem membro chamado 'str'
this->str = str_ptr;
^
CMakeFiles/HelloPangolin.dir/build.make:75: receita para o destino 'CMakeFiles/HelloPangolin.dir/main.o' falhou
make[2]: *** [CMakeFiles/HelloPangolin.dir/main.o] Erro 1
CMakeFiles /Makefile2:82: receita para o destino 'CMakeFiles/HelloPangolin.dir/all' falhou
make[1]: *** [CMakeFiles/HelloPangolin.dir/all] Erro 2
Makefile:90: receita para o destino 'all' falhou
make: *** [all] Erro 2
Este é um problema com CMakeLists.txt, relacionado principalmente ao suporte padrão e outros problemas. Você precisa adicionar:
# 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()
Finalmente, todo o CMakeLists.txt deve ser:
# 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()
Muitas soluções são simplesmente mudar o conjunto (CMAKE_CXX_STANDARD 11), mas nunca funcionou. Isso é um pouco complicado, mas pode ser feito. Se não funcionar, tente isso.
O resultado é: