目录
本文环境:
Ubuntu: 22.04
OpenCV: 3.4.16
Pangolin: 0.9.1
Eigen3: 3.4.0
shared_ptr找不到
报错信息:
simpleViewer.h:238:8: error: ‘shared_ptr’ in namespace ‘std’ does not name a template type
238 | std::shared_ptr<std::thread> th_run_;
| ^~~~~~~~~~
解决方法:在头文件中添加
#include <memory>
Can’t initialize GTK backend in function ‘cvInitSystem’
报错信息:
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(3.4.16) /home/xxx/Desktop/opencv-3.4.16/modules/highgui/src/window_gtk.cpp:624: error: (-2:Unspecified error) Can't initialize GTK backend in function 'cvInitSystem'
解决方法:我使用的是远程连接ubuntu运行,在虚拟机内直接运行程序后不报错
OpenCV依赖项,无法定位软件包libjasper-dev
报错信息:
解决方法:
先添加密钥:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
再添加软件源:
$ sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
最后再更新软件源列表,安装:
$ sudo apt update
$ sudo apt install libjasper1 libjasper-dev
用户中文目录修改成英文
问题描述:
有时候安装系统后,用户目录下的文件夹是中文的(比如下载、文档),需要修改为英文
解决方法:
$ export LANG=en_US
$ xdg-user-dirs-gtk-update
在弹出的对话框中选择确定修改
再输入
$ export LANG=zh_CN
就可以了
sudo: updatedb:找不到命令
报错信息:
如标题
解决方法:
$ sudo apt install mlocate
$ sudo updatedb
Ubuntu 24.04后
$ sudo apt install plocate
$ sudo updatedb
安装ORB-SLAM2,以及过程中遇到的问题解决方法
安装过程:
首先安装好OpenCV,Eigen3,本文的安装版本见目录“本文环境”部分
接着来安装Pangolin
首先要安装一些Pangolin所需要的依赖库:
$ sudo apt-get install libglew-dev
$ sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
$ sudo apt-get install libboost-all-dev
$ sudo apt-get install libpython2.7-dev
下载Pangolin,本文编写时最新为0.9.1
$ git clone https://github.com/stevenlovegrove/Pangolin.git
进入Pangolin目录,编译
$ mkdir build
$ cd build
$ cmake ..
$ make -j
$ sudo make install
安装完Pangolin后,下载ORB SLAM2
$ git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
进入ORB_SLAM2目录下,编译前修改一下ORB_SLAM2文件夹内的内容
Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc
Examples/RGB-D/rgbd_tum.cc
Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc
src/LocalMapping.cc
src/LoopClosing.cc
src/System.cc
src/Tracking.cc
src/Viewer.cc
在这些源文件的头文件处添加头文件
#include <unistd.h>
然后打开ORB_SLAM2/include/LoopClosing.h
// 找到
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
// 修改为
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;
修改ORB_SLAM2/CMakeLists.txt,修改c++11 为 c++14
# 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()
改为
# Check C++14 or C++0x support
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++14.")
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++14 support. Please use a different C++ compiler.")
endif()
继续修改ORB_SLAM2/CMakeLists.txt
# 找到
find_package(Eigen3 3.1.0 REQUIRED)
# 改为
find_package(Eigen3 3.1.0 REQUIRED NO_MODULE)
最后进行编译
$ ./build.sh
编译成功
参考文章:
ORB SLAM2 编译报错 /usr/bin/ld:找不到 -lEigen3::Eigen
Ubuntu虚拟机下安装运行ORB-SLAM2
ORB_SLAM安装问题error: ‘std::chrono::monotonic_clock’ has not been declared
ORB_SLAM2项目中的报错及解决方法
ORB_SLAM2编译之Pangolin安装与报错解决
vmware虚拟机升级ubuntu 24.04后,开机黑屏卡死
解决办法:
vmware里面选择虚拟机,编辑虚拟机设置
硬件里面,点击显示器,取消勾选“加速3D图形“
重新启动发现可用了
升级到Ubuntu 24.04后,Pangolin报错
报错信息1:
升级到Ubuntu 24.04后,尝试用Pangolin运行示例程序发现报错,尝试重新cmake安装,make过程中报错
hm@vm:~/Desktop/Pangolin/examples/HelloPangolin/build$ make
[ 50%] Building CXX object CMakeFiles/HelloPangolin.dir/main.o
[100%] Linking CXX executable HelloPangolin
/usr/bin/ld: warning: libtiff.so.5, needed by /usr/local/lib/libpango_image.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: /usr/local/lib/libpango_image.so: undefined reference to `TIFFReadScanline@LIBTIFF_4.0'
/usr/bin/ld: /usr/local/lib/libpango_image.so: undefined reference to `TIFFScanlineSize@LIBTIFF_4.0'
/usr/bin/ld: /usr/local/lib/libpango_image.so: undefined reference to `TIFFSetWarningHandler@LIBTIFF_4.0'
/usr/bin/ld: /usr/local/lib/libpango_image.so: undefined reference to `TIFFClose@LIBTIFF_4.0'
/usr/bin/ld: /usr/local/lib/libpango_image.so: undefined reference to `TIFFGetField@LIBTIFF_4.0'
/usr/bin/ld: /usr/local/lib/libpango_image.so: undefined reference to `TIFFOpen@LIBTIFF_4.0'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/HelloPangolin.dir/build.make:108:HelloPangolin] 错误 1
make[1]: *** [CMakeFiles/Makefile2:83:CMakeFiles/HelloPangolin.dir/all] 错误 2
make: *** [Makefile:91:all] 错误 2
解决方法:
在 libtiff官网 下载对应的安装包 tiff-4.0.10.zip,解压之后,然后编译安装:
$ cd tiff-4.0.10/
$ mkdir cmake-build
$ cd cmake-build/
$ cmake ..
$ make
$ sudo make install
重新make发现可用了
报错信息2:
尝试运行刚刚编译好的HelloPangolin报错,找不到libtiff.so.5这个库
hm@vm:~/Desktop/Pangolin/examples/HelloPangolin/build$ ./HelloPangolin
./HelloPangolin: error while loading shared libraries: libtiff.so.5: cannot open shared object file: No such file or directory
解决方法:
首先输入下面命令查询当前动态库版本,根据找不到的动态库名自行更改。
$ ls /lib/x86_64-linux-gnu/libtiff.so.*
# 运行结果
/lib/x86_64-linux-gnu/libtiff.so.6 /lib/x86_64-linux-gnu/libtiff.so.6.0.1
可以看到我们 Ubuntu 24.04 的系统上只有 6 这个版本,我们设置一个 5 到 6 的软连接即可。
$ sudo ln -s /lib/x86_64-linux-gnu/libtiff.so.6 /lib/x86_64-linux-gnu/libtiff.so.5
重新运行成功
参考文章:
编译报错:undefined reference to `TIFFReadDirectory@LIBTIFF_4.0‘解决方法
【BUG解决】PyTorch ImportError: libtinfo.so.5: cannot open shared object file: No such file or directory
ORB-SLAM2运行数据集显示“已放弃(核心已转储)”
解决方法:
在 ORB_SLAM2/CMakeLists.txt 中删除 -march=native
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -march=native ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -march=native")
在 ORB_SLAM2/Thirdparty/g2o/CMakeLists.txt中删除-march=native
# Compiler specific options for gcc
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -march=native")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -march=native")