在docker环境下从头搭建openvslam/orb_slam3的流程记录以及问题总结

本文主要是介绍在docker环境下从头搭建openvslam/orb_slam3的流程记录以及问题总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 0. 前言
    • 1. MobaXterm软件
    • 2. docker操作
      • 2.1. 拉一个ubuntu镜像
      • 2.2. 修改名字(可选)
      • 2.3. 删除之前的docker镜像(可选)
    • 3. openvslam搭建流程
      • 3.1. 起容器
      • 3.2. 前置包的安装
      • 3.3. 安装Eigen
      • 3.4. 安装opencv
      • 3.5. 安装DBoW2
      • 3.6. 安装g2o
      • 3.7. 安装Pangolin库
      • 3.8. 安装yaml-cpp (可选)
      • 3.9. 安装openvslam
      • 3.10. 安装openssh
      • 3.11. MobaXterm软件远程连接容器
      • 3.12. 运行demo
    • 4. orb_slam3搭建流程
      • 4. 1. 起容器
      • 4.2. 前置包的安装
      • 4.3. 安装Eigen
      • 4.4. 安装opencv
      • 4.5. 安装Pangolin库
      • 4.6. 安装bosst库
      • 4.7. 安装DBoW2
      • 4.8. 安装g2o
      • 4.9. 安装Sophus
      • 4.10. 解压ORBvoc.txt.tar.gz压缩包
      • 4.11. 安装orb_slam3
      • 4.12. 安装openssh
      • 4.13. MobaXterm软件远程连接容器
      • 4.14. 运行demo
    • 5. 编译问题
      • 5.1 MobaXterm相关问题
        • 5.1.1 问题1:报错显示 “xclock command not found”:
        • 5.1.2 问题2:报错显示 "Error: Can't open this Distplay"
        • 5.1.3 问题3:报错显示 "error: XDG RUNTIME DIR not set in environment"
      • 5.2 编译问题
        • 5.2.1 问题1:报错显示 "No rule to make target '/usr/lib/x86_64-linux-gnu/libjpeg.so', needed by 'src/libpangolin.so'. Stop"
        • 5.2.2 问题2:报错显示 "fatal error: openssl/md5.h: No such file or directory"
        • 5.2.3 问题3:报错显示 "cannot find -lboost_serialization"
      • 5.3. 之前遇到的编译问题
        • 5.3.1 问题1:报错显示 "Could not find the following static Boost libraries"
        • 5.3.2 问题2:报错显示 "/usr/bin/ld: cannot find -lboost_system-mt"
        • 5.3.3 问题3:报错显示 "//data/casia_mosaic_liyi_linux/src/siftgpu_extractor/SiftGPU/bin/libsiftgpu.so: undefined reference to `__cudaRegisterFatBinary@libcudart.so.11.0"
        • 5.3.4 问题4:报错显示 "//data/casia_mosaic_liyi_linux/src/siftgpu_extractor/SiftGPU/bin/libsiftgpu.so: undefined reference to `ilGetIntege"
        • 5.3.5 问题5:报错显示 "//data/casia_mosaic_liyi_linux/src/siftgpu_extractor/SiftGPU/bin/libsiftgpu.so: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream()@GLIBCXX_3.4.26"
        • 5.3.6 问题6:报错显示 "//data/casia_mosaic_liyi_linux/src/siftgpu_extractor/SiftGPU/bin/libsiftgpu.so: undefined reference to `log@GLIBC_2.29"
        • 5.3.7 问题7:报错显示 "apt-file not found"
        • 5.3.8 问题8:报错显示 "ld.so.conf: No such file or directory"

0. 前言

最近基于公司的需求,开始搭建Slam算法。在搭建Slam算法的过程中,我遇到了很多问题。为了方便后续的重复部署以及给读者朋友做一个参考,因此,我记录了在服务器上通过docker搭建openvslam以及orb_slam3的全部过程,并且整理了遇到的编译问题。


本文主要内容如下:
第一部分:MobaXterm软件
第二部分:docker操作
第三部分:openvslam搭建流程
第四部分:orb_slam3搭建流程
第五部分:编译问题


参考博客:

  1. github:zm0612,名称:openvslam-comments
  2. 作者:一点儿也不萌的萌萌,开源SLAM框架学习——OpenVSLAM源码解析: 第一节 安装和初探
  3. openvslam论文链接
  4. github:UZ-SLAMLab,名称:ORB_SLAM3
  5. 作者:抓饼先生,Boost笔记 1:下载、编译、安装、测试
  6. How to fix: fatal error: openssl/opensslv.h: No such file or directory in RedHat 7
  7. 在Ubuntu上安装C++库
  8. 【视频开发】【计算机视觉】doppia编译之四:安装其他库、编译和运行doppia
  9. 运行应用程序时出现GLIBCXX_3.4.26not found问题
  10. wsl2中安装QGC

1. MobaXterm软件

本次部署因为是在远程服务器上,无法在命令行窗口显示Slam的定位和建图过程。因此,采用带有Xserver的MobaXterm软件。该软件可以通过Xserver服务来可视化服务器上的图形化窗口。

第一步,建立你的session:
在这里插入图片描述
第二步,测试可视化显示

输入xclock或者xeyes查看是否可以可视化显示:
在这里插入图片描述
在这里插入图片描述

在可视化窗口时,遇到问题可以查看第5章节中是否存在解决方法,如果依旧没有解决可以在评论区提出,我们一起解决。

2. docker操作

2.1. 拉一个ubuntu镜像

 sudo docker pull ubuntu:18.04

2.2. 修改名字(可选)

我个人喜欢把镜像重命名一下,方便管理。
注意:不是把原始镜像重命名,而是重新生成一个新的镜像

sudo docker tag f9a80a55f492 liyi_cpp:1.0
# f9a80a55f492 是ubuntu:18.04的镜像编号。
# liyi_cpp:1.0是重命名的名字和版本号。

2.3. 删除之前的docker镜像(可选)

sudo docker rmi ubuntu:18.04

3. openvslam搭建流程

OpenvSlam的官方仓库已经关闭,但是github作者:zm0612 已经fork下来可以继续进行安装。

该作者还有一个csdn的博客进行安装说明,我就是参考的这个博主的内容进行整理的。
读者朋友也可以参考这个博主的文章:
作者:一点儿也不萌的萌萌,开源SLAM框架学习——OpenVSLAM源码解析: 第一节 安装和初探

openvslam的环境包含以下安装包:

  • Eigen:用于矩阵运算。
  • g2o: 用于优化基于图的非线性误差函数。
  • SuiteSparse: 一组与稀疏矩阵相关的包。
  • DBoW2:用于图像检索的词袋图像数据库。
  • yaml-cpp:yaml文件管理的包。(可选)
  • OpenCV:数字图像处理的包。
  • Pangolin:用于可视化显示的包。

这些包我已经提前下好了,放在百度云中,读者朋友可以自行下载

链接:https://pan.baidu.com/s/1wT95r1iJFwyVg8vhPbcGtQ
提取码:1234

3.1. 起容器

基于之前拉取的镜像,起一个容器。

sudo docker run --name openvslam -v /media/DATA/liyi/project/vscode:/data -p 6790:22 --gpus=all -it liyi_cpp:1.0 /bin/bash
# --name 后面是容器名字
# -v 指的是本地目录和容器目录的映射关系
# -p 指的是容器开放的端口的映射
# --gpus 指的是容器可以调用nvidia的gpu。all指的是全部的显卡
# -it 后面跟着镜像的名字和版本号

3.2. 前置包的安装

基于基础使用以及依赖库,需要提前安装一些包。代码如下:

sudo apt update -y
apt upgrade -y --no-install-recommends
# basic dependencies
apt install -y build-essential pkg-config cmake git wget curl unzip vim
# g2o dependencies
apt install -y libatlas-base-dev libsuitesparse-dev
# OpenCV dependencies
apt install -y libgtk-3-dev
apt install -y ffmpeg
apt install -y libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavresample-dev
# eigen dependencies
apt install -y gfortran
# other dependencies
apt install -y libyaml-cpp-dev libgoogle-glog-dev libgflags-dev
# (if you plan on using PangolinViewer)
# Pangolin dependencies
apt install -y libglew-dev
# 用来读取jpeg图像的包。
apt install -y libjpeg

3.3. 安装Eigen

cd /path/to/working/dir(工作路径)
# 版本也可以自己指定。eigen也可以通过我的百度云离线下载好,自己解压。
wget -q http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2
tar xf 3.3.4.tar.bz2
rm -rf 3.3.4.tar.bz2
cd eigen-eigen-5a0156e40feb
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

安装好后,include文件和lib文件,分别在/usr/local/include和/usr/local/lib下。
在这里插入图片描述

3.4. 安装opencv

cd /path/to/working/dir
# 版本也可以自己指定。
wget -q https://github.com/opencv/opencv/archive/3.4.0.zip
unzip -q 3.4.0.zip
rm -rf 3.4.0.zip
cd opencv-3.4.0
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DENABLE_CXX11=ON -DBUILD_DOCS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_JASPER=OFF -DBUILD_OPENEXR=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DWITH_EIGEN=ON -DWITH_FFMPEG=ON -DWITH_OPENMP=ON ..
make -j4
sudo make install

安装好后,include文件和lib文件,分别在/usr/local/include和/usr/local/lib下。
在这里插入图片描述

3.5. 安装DBoW2

cd /path/to/working/dir
git clone https://github.com/shinsumicco/DBoW2.git
cd DBoW2
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

安装好后,include文件和lib文件,分别在/usr/local/include和/usr/local/lib下。
在这里插入图片描述

3.6. 安装g2o

cd /path/to/working/dir
# 可以自己在github上体现下载好。
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_FLAGS=-std=c++11 -DBUILD_SHARED_LIBS=ON -DBUILD_UNITTESTS=OFF -DBUILD_WITH_MARCH_NATIVE=ON -DG2O_USE_CHOLMOD=OFF -DG2O_USE_CSPARSE=ON -DG2O_USE_OPENGL=OFF -DG2O_USE_OPENMP=ON ..
make -j4
sudo make install

安装好后,include文件和lib文件,分别在/usr/local/include和/usr/local/lib下。
在这里插入图片描述

3.7. 安装Pangolin库

cd /path/to/working/dir
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
git checkout ad8b5f83222291c51b4800d5a5873b0e90a0cf81
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

安装好后,include文件和lib文件,分别在/usr/local/include和/usr/local/lib下。
在这里插入图片描述

3.8. 安装yaml-cpp (可选)

执行以下命令:

git clone https://github.com/jbeder/yaml-cpp
cd yaml-cpp
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

3.9. 安装openvslam

DCMAKE_BUILD_TYPE可以根据需求选择Release或者Debug。

cd /path/to/openvslam
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_WITH_MARCH_NATIVE=ON -DUSE_PANGOLIN_VIEWER=ON -DUSE_SOCKET_PUBLISHER=OFF -DUSE_STACK_TRACE_LOGGER=ON -DBOW_FRAMEWORK=DBoW2 -DBUILD_TESTS=ON ..
make -j4

3.10. 安装openssh

#下载openssh
apt-get update
apt-get install openssh-server
# 设置root密码,然后设置两遍相同的密码,之后登陆的时候要用到
passwd
# 修改配置文件
apt-get install vim
vim /etc/ssh/sshd_config
# 注释掉 PermitRootLogin prohibit-password 这一行 添加这一行 PermitRootLogin yes 
# 5. 重启ssh服务
service ssh restart
# 或使用
# /etc/init.d/ssh restart# 本机连接ssh
# ssh -p 6789 root@0.0.0.0
# 远程访问服务器docker里正在运行的容器
# ssh -p 6790 root@192.168.2.83

3.11. MobaXterm软件远程连接容器

和之前的方法一样,配置远程服务器的会话。注意端口是起容器时设置的端口号,在上述例子中为6790。
在这里插入图片描述

在这里插入图片描述

3.12. 运行demo

cd slam编译所在位置/build
./run_euroc_slam -v /data/database/orb_vocab.dbow2 -d /data/database/EuRoC/V1_03_difficult/mav0 -c ../example/euroc/EuRoC_mono.yaml
# -v orb_vocab.dbow2的文件路径。可以在网上下载,或者通过我的百度云分享下载。
# -d 数据的所在路径
# -c 相机的配置文件

在这里插入图片描述

4. orb_slam3搭建流程

orb_slam3的github代码:github:UZ-SLAMLab,名称:ORB_SLAM3

orb_slam不用自己找第三方库,代码里面就自带各种三方库。(缺一个boost_1_83_0,需要自己下载。)
在这里插入图片描述

openvslam的环境包含以下安装包:

  • Eigen:用于矩阵运算。
  • g2o: 用于优化基于图的非线性误差函数。
  • Sophus: 这是一个李群的c++实现,通常用于二维和三维几何问题(即计算机视觉或机器人应用)。
  • DBoW2:用于图像检索的词袋图像数据库。
  • OpenCV:数字图像处理的包。
  • Pangolin:用于可视化显示的包。
  • boost:Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。

搭建流程如下:

4. 1. 起容器

sudo docker run --name orb_slam3 -v /media/DATA/liyi/project/vscode:/data -p 6788:22 --gpus=all -it liyi_cpp:1.0 /bin/bash
# --name 后面是容器名字
# -v 指的是本地目录和容器目录的映射关系
# -p 指的是容器开放的端口的映射
# --gpus 指的是容器可以调用nvidia的gpu。all指的是全部的显卡
# -it 后面跟着镜像的名字和版本号

4.2. 前置包的安装

基于基础使用以及依赖库,需要提前安装一些包。代码如下:

sudo apt update -y
apt upgrade -y --no-install-recommends
# basic dependencies
apt install -y build-essential pkg-config cmake git wget curl unzip vim
# g2o dependencies
apt install -y libatlas-base-dev libsuitesparse-dev
# OpenCV dependencies
apt install -y libgtk-3-dev
apt install -y ffmpeg
apt install -y libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavresample-dev
# eigen dependencies
apt install -y gfortran
# other dependencies
apt install -y libyaml-cpp-dev libgoogle-glog-dev libgflags-dev
# (if you plan on using PangolinViewer)
# Pangolin dependencies
apt install -y libglew-dev
# 用来读取jpeg图像的包。
apt install -y libjpeg

4.3. 安装Eigen

cd orb_slam3代码所在路径/Thirdparty_add/eigen-git-mirror
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

4.4. 安装opencv

cd orb_slam3代码所在路径/Thirdparty_add/opencv-4.8.0
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DENABLE_CXX11=ON -DBUILD_DOCS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_JASPER=OFF -DBUILD_OPENEXR=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DWITH_EIGEN=ON -DWITH_FFMPEG=ON -DWITH_OPENMP=ON ..
make -j4
sudo make install

4.5. 安装Pangolin库

cd orb_slam3代码所在路径/Thirdparty_add/Pangolin
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

4.6. 安装bosst库

cd orb_slam3代码所在路径/Thirdparty_add/boost_1_83_0
sh bootstrap.sh
./b2
./b2 --clean
./b2 install

参考博客流程:作者:抓饼先生,Boost笔记 1:下载、编译、安装、测试

4.7. 安装DBoW2

cd orb_slam3代码所在路径/Thirdparty/DBoW2
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
sudo make install

4.8. 安装g2o

cd orb_slam3代码所在路径/Thirdparty/g2o
mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_CXX_FLAGS=-std=c++11 -DBUILD_SHARED_LIBS=ON -DBUILD_UNITTESTS=OFF -DBUILD_WITH_MARCH_NATIVE=ON -DG2O_USE_CHOLMOD=OFF -DG2O_USE_CSPARSE=ON -DG2O_USE_OPENGL=OFF -DG2O_USE_OPENMP=ON ..
make -j4
sudo make install

4.9. 安装Sophus

cd orb_slam3代码所在路径/Thirdparty/Sophus
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j4
make install

4.10. 解压ORBvoc.txt.tar.gz压缩包

cd orb_slam3代码所在路径/Vocabulary
tar -xf ORBvoc.txt.tar.gz

4.11. 安装orb_slam3

DCMAKE_BUILD_TYPE可以根据需求选择Release或者Debug。

cd orb_slam3代码所在路径
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4

我的docker环境为:
在这里插入图片描述

4.12. 安装openssh

#下载openssh
apt-get update
apt-get install openssh-server
# 设置root密码,然后设置两遍相同的密码,之后登陆的时候要用到
passwd
# 修改配置文件
apt-get install vim
vim /etc/ssh/sshd_config
# 注释掉 PermitRootLogin prohibit-password 这一行 添加这一行 PermitRootLogin yes 
# 5. 重启ssh服务
service ssh restart
# 或使用
# /etc/init.d/ssh restart# 本机连接ssh
# ssh -p 6789 root@0.0.0.0
# 远程访问服务器docker里正在运行的容器
# ssh -p 6790 root@192.168.2.83

4.13. MobaXterm软件远程连接容器

和之前的方法一样,配置远程服务器的会话。注意端口是起容器时设置的端口号,在上述例子中为6788。
在这里插入图片描述
在这里插入图片描述

4.14. 运行demo

cd slam编译所在位置/build
../Examples/Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ../Examples/Monocular/EuRoC.yaml /data/database/EuRoC/V1_03_difficult ../Examples/Monocular/EuRoC_TimeStamps/V103.txt test# 第一个参数是ORBvoc.txt的路径
# 第二个参数是箱子配置参数的路径
# 第三个参数是数据的路径
# 第四个参数是时间戳txt文件的路径
# 第五个轨迹文件名

在这里插入图片描述

5. 编译问题

5.1 MobaXterm相关问题

5.1.1 问题1:报错显示 “xclock command not found”:

在这里插入图片描述
解决:
x11的包没有安装,需要通过下属代码进行安装:

sudo apt-get update
sudo apt-get install x11-apps
5.1.2 问题2:报错显示 “Error: Can’t open this Distplay”

在这里插入图片描述
解决:
这是找不到显示的服务器,需要添加服务器的地址和端口号。
首先,编辑环境变量:

vim ~/.bashrc

添加显示服务器地址和端口号:

# 例如我的
export DISPLAY=192.168.2.136:0.0

在这里插入图片描述
再刷新环境变量:

source ~/.bashrc
5.1.3 问题3:报错显示 “error: XDG RUNTIME DIR not set in environment”

在这里插入图片描述解决:
XDG运行的缓存没有地方存储,需要设置存放目录。
首先,编辑环境变量:

vim ~/.bashrc

添加显示服务器地址和端口号:

# 例如我的
export XDG_RUNTIME_DIR=/tmp/runtime_root

在这里插入图片描述
再刷新环境变量:

source ~/.bashrc

5.2 编译问题

5.2.1 问题1:报错显示 “No rule to make target ‘/usr/lib/x86_64-linux-gnu/libjpeg.so’, needed by ‘src/libpangolin.so’. Stop”
make[2]: *** No rule to make target '/usr/lib/x86_64-linux-gnu/libjpeg.so', needed by 'src/libpangolin.so'.  Stop.
CMakeFiles/Makefile2:168: recipe for target 'src/CMakeFiles/pangolin.dir/all' failed
make[1]: *** [src/CMakeFiles/pangolin.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

libpangolin.so需要libjpeg.so文件,但是libjpeg.so不存在。
解决方法:

  1. 先查看/usr/lib/x86_64-linux-gnu/libjpeg.so是否存在,没有的话则重新下载:
apt install -y libjpeg

如果存在,但是名称不一样。如下图:
在这里插入图片描述则可以进行软连接。

ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so.8 /usr/lib/x86_64-linux-gnu/libjpeg.so
# 第一个是源文件。
# 第二个是软连接生成的文件。

在这里插入图片描述
其他包也同理:
在这里插入图片描述

5.2.2 问题2:报错显示 “fatal error: openssl/md5.h: No such file or directory”

在这里插入图片描述
没有下载openssl
解决方法:

sudo apt-get install libssl-dev

在这里插入图片描述

解决方法引用自How to fix: fatal error: openssl/opensslv.h: No such file or directory in RedHat 7

5.2.3 问题3:报错显示 “cannot find -lboost_serialization”

在这里插入图片描述
该docker没有lboost_serialization库,需要下载boost库。
解决方法:
之前文章中介绍过boost库的下载方法。如下:

cd orb_slam3代码所在路径/Thirdparty_add/boost_1_83_0
sh bootstrap.sh
./b2
./b2 --clean
./b2 install

解决方法引用自作者:抓饼先生,Boost笔记 1:下载、编译、安装、测试

5.3. 之前遇到的编译问题

我之前编译siftgpu遇到的问题,和本文章相关不大,只是总结在这,方便我后续查看。

5.3.1 问题1:报错显示 “Could not find the following static Boost libraries”
Could not find the following static Boost librariesboost_systemboost_filesystemboost_threadboost_date_timeboost_chronoboost_regexboost_serializationboost_program_options

解决方法:

apt install libboost-all-dev
5.3.2 问题2:报错显示 “/usr/bin/ld: cannot find -lboost_system-mt”
/usr/bin/ld: cannot find -lboost_program_options-mt
/usr/bin/ld: cannot find -lboost_filesystem-mt
/usr/bin/ld: cannot find -lboost_system-mt
/usr/bin/ld: cannot find -lboost_thread-mt

这里出现错误的原因,是boost库链接出错,这时候我们需要修改CMakeList.txt文件,这里我就直接把CMakeList.txt贴出来,修改的地方做过注释。
解决方法:
【视频开发】【计算机视觉】doppia编译之四:安装其他库、编译和运行doppia
在错误四:
在这里插入图片描述

5.3.3 问题3:报错显示 “//data/casia_mosaic_liyi_linux/src/siftgpu_extractor/SiftGPU/bin/libsiftgpu.so: undefined reference to `__cudaRegisterFatBinary@libcudart.so.11.0”

解决方法:
没有libcudart.so.11.0,请安装cuda,并配置cuda环境。

5.3.4 问题4:报错显示 “//data/casia_mosaic_liyi_linux/src/siftgpu_extractor/SiftGPU/bin/libsiftgpu.so: undefined reference to `ilGetIntege”
undefined reference to `ilInit'
undefined reference to `ilGenImages'
undefined reference to `ilBindImage'undefined reference to `ilLoadImage'
undefined reference to `ilGetInteger'
undefined reference to `ilGetInteger'
undefined reference to `ilGetInteger'
undefined reference to `ilGetInteger'

解决方法:
安装 devil库
在Ubuntu上安装C++库

sudo apt-get install libdevil1c2 libdevil-dev
apt-file show libdevil1c2

libdevil1c2: /usr/bin/ilur
libdevil1c2: /usr/lib/libIL.so.1
libdevil1c2: /usr/lib/libIL.so.1.1.0
libdevil1c2: /usr/lib/libILU.so.1
libdevil1c2: /usr/lib/libILU.so.1.1.0
libdevil1c2: /usr/lib/libILUT.so.1
libdevil1c2: /usr/lib/libILUT.so.1.1.0
libdevil1c2: /usr/share/doc/libdevil1c2/changelog.Debian.gz
libdevil1c2: /usr/share/doc/libdevil1c2/copyright
libdevil1c2: /usr/share/lintian/overrides/libdevil1c2\

5.3.5 问题5:报错显示 “//data/casia_mosaic_liyi_linux/src/siftgpu_extractor/SiftGPU/bin/libsiftgpu.so: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits, std::allocator >::basic_ostringstream()@GLIBCXX_3.4.26”

解决:
libstdc++.so.6.0.25中不包含GLIBCXX的3.4.26版本,因此需要下载libstdc++.so.6.0.26,然后重新软连接到libstdc++.so.6
一般libstdc++都在/usr/lib64中,但是我在docker中为/usr/lib/x86_64-linux-gnu
参考:运行应用程序时出现GLIBCXX_3.4.26not found问题

5.3.6 问题6:报错显示 “//data/casia_mosaic_liyi_linux/src/siftgpu_extractor/SiftGPU/bin/libsiftgpu.so: undefined reference to `log@GLIBC_2.29”

解决方法:
检查/usr/lib/x86_64-linux-gnu/libc.so,看看是否存在或者,兼容GLIBC_2.29.
检查命令:

strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_

没有lib.so,则安装glibc-2.29,并进行安装和编译

cd glibc-build
../glibc-2.29/configure --prefix=/usr/lib/glibc-2.29
make -j8
make install

然后进行软连接:

ln -sf /usr/lib/glibc-2.29/lib/libm-2.29.so libm.so.6

参考博客:wsl2中安装QGC

缺失bison和gawk,或者bison和gawk的版本过低。
解决办法:
更新文件 gawk 和 bison
命令为:
sudo apt-get install gawk
sudo apt-get install bison

然后libsiftgpu.so的重新编译生成。在SiftGPU下进行编译。
用ldd /bin/libsiftgpu.so来进行测试。

参考博客:SiftGPU在Ubuntu和Windows下的编译与使用

5.3.7 问题7:报错显示 “apt-file not found”

解决:

sudo apt-get update
sudo apt-get install apt-file
sudo apt-file update
5.3.8 问题8:报错显示 “ld.so.conf: No such file or directory”

在指定位置建立ld.so.conf

mkdir -p $prefix/etc
touch $prefix/etc/ld.so.conf

参考博客:ld.so.conf: No such file or directory

这篇关于在docker环境下从头搭建openvslam/orb_slam3的流程记录以及问题总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282078

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3