C++ 和 Ubuntu 学习过程中遇到的一些问题及解决方案

本文环境:

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")

参考文章:

论ORBSLAM_with_pointcloud_map段错误(核心已转储)的另一种解决方法

  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 1、项目源码在上传前,都经过本地成功运行,功能测试ok。请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、机械电子信息等相关专业背景的在校大学生、专业老师 行业从业人员等下载使用。 3、用途:项目代表性强,具有创新性和启发性,故具有挺高的学习借鉴价值。不仅适合小白入门进阶,还可作为毕设项目、课程设计、大作业、比赛初期项目立项演示等。 4、如果基础还不错,又热爱学习钻研,也可基于此项目基础上进行修改进行二次开发。 本人也是技术狂热者,如果觉得此项目对您有价值,欢迎下载使用! 无论您是运行还是二次开发,部署过程遇到问题,请及时私信交流,欢迎学习。 基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip 基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip 基于C++实现的课程成绩管理系统源码+实验报告+sln解决方案(VS直接打开使用).zip
【资源说明】 1、项目源码在上传前,都经过本地成功运行,功能测试ok。请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、机械电子信息等相关专业背景的在校大学生、专业老师 行业从业人员等下载使用。 3、用途:项目代表性强,具有创新性和启发性,故具有挺高的学习借鉴价值。不仅适合小白入门进阶,还可作为毕设项目、课程设计、大作业、比赛初期项目立项演示等。 4、如果基础还不错,又热爱学习钻研,也可基于此项目基础上进行修改进行二次开发。 本人也是技术狂热者,如果觉得此项目对您有价值,欢迎下载使用! 无论您是运行还是二次开发,部署过程遇到问题,请及时私信交流,欢迎学习。 数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip 数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip 数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip 数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip数据结构课设新项目-交通模拟基于floyd算法来找最短路径项目C++源码(含sln解决方案).zip
【资源说明】 1、项目源码在上传前,都经过本地成功运行,功能测试ok。请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、机械电子信息等相关专业背景的在校大学生、专业老师 行业从业人员等下载使用。 3、用途:项目代表性强,具有创新性和启发性,故具有挺高的学习借鉴价值。不仅适合小白入门进阶,还可作为毕设项目、课程设计、大作业、比赛初期项目立项演示等。 4、如果基础还不错,又热爱学习钻研,也可基于此项目基础上进行修改进行二次开发。 本人也是技术狂热者,如果觉得此项目对您有价值,欢迎下载使用! 无论您是运行还是二次开发,部署过程遇到问题,请及时私信交流,欢迎学习。 基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip 基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip 基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip 基于C++实现的全国交通模拟仿真源码+sln解决方案(数据结构课设项目).zip
在进行 C++ 多态实验时,可能会出现以下几个常见问题,提供一些解决方法供参考: 1. 编译错误 问题描述:在编译程序时出现错误,无法通过编译。 解决方法:查看编译器给出的错误提示,根据提示进行代码调整。常见错误包括语法错误、类型错误、变量未定义等。需要仔细检查代码,确保语法正确、类型匹配、变量定义清晰。 2. 运行错误 问题描述:程序可以编译通过,但在运行时出现错误。 解决方法:通过调试器(如 gdb 等)等工具进行调试,查看程序运行过程出现的错误。常见错误包括指针操作错误、数组越界、内存泄漏等。需要仔细检查代码,确保指针操作正确、数组越界问题得到解决、内存得到正确释放。 3. 逻辑错误 问题描述:程序可以编译通过、运行无错误,但结果不符合预期。 解决方法:通过添加调试输出语句、使用断点等方法,逐步调试程序,查看程序执行过程的变量值是否正确、程序流程是否符合预期。需要仔细检查代码,确保逻辑正确、边界条件得到考虑。 4. 面向对象设计错误 问题描述:程序使用了继承、多态等面向对象特性,但设计不合理,导致程序难以维护、扩展。 解决方法:需要进行面向对象设计的学习和实践,掌握面向对象设计的基本原则,例如单一职责原则、开放封闭原则、依赖倒置原则等。需要仔细考虑程序的设计,确保代码易于维护、扩展、重用。 希望这些解决方法可以帮助您在 C++ 多态实验遇到问题时进行及时解决

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值