ubuntu14.04虚拟机上编译Opencv3.4.9遇到的一些莫名其妙的编译错误

记录一下漫漫编译之路的绊脚石

错误1:编译过程中出现一个 internal compiler error: 段错误 const T22 v22_;
解决方案:更新g–和g++版本!!本来是4.8.4更新到5.5就没有这个错误了,我也不知道我为什么要更新这个,找了很多地方都没找到解决方案,就试着升级了一下,竟然没报错了。后面还遇到了一些类似的段定义错误,就顺手升级了一下cmake,本来是2.8好像,升级到了3.11.3。

错误2/usr/include/c++/5/bits/stl_multimap.h:557:23: internal compiler error: 段错误 insert(iterator __position,const value_type& __x)
配图:
错误2
解决方案:在 /usr/include/c++/5/bits/stl_multimap.h 这个头文件中 修改所有的__position为position 修改所有的__x为x

错误3fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录
配图:
错误3
解决方案
① 在/path_to_your_opencv/opencv-3.4.9/modules/stitching/include 目录下的CMakeLists.txt中的顶部加入INCLUDE_DIRECTORIES("/path_to_your_opencv/opencv-3.4.9/opencv_contrib-3.4.9/modules/xfeatures2d/include")
因为我就是在这个目录下找到cuda.hpp文件的。
② 另外在后面再次出现了该错误,找到出现错误的文件,我的出错位置在:/home/stt/me/opencv-3.4.9/modules/stitching/include/opencv2/stitching/detail/matchers.hpp
在文件中把头部的 #include "opencv2/xfeatures2d/cuda.hpp" 改为绝对路径:

#include "/path_to_your_opencv/opencv-3.4.9/opencv_contrib-3.4.9/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp" 

例如,在我自己的目录下这样写:
在这里插入图片描述

再记录一下在编译Pangolin和ORB_SLAM2中遇到的问题:
在编译时看到过程中出现了好多类似于图中这种 什么什么warning,还有c++/5/backward/binders.h **note** declares here 这种note提示,看着很烦。在这里插入图片描述
在两个地方做了改动就没问题了
解决方案
① 回退到自己的根目录然后 sudo gedit ~/.bashrc
在文档最后加入

#using c++11
alias g++='g++-5.5 -std=c++11 -Wno-psabi'

加入这个-std=c++11是为了使用c++11来编译,这是我另一个错误加上的,这里主要是用到-Wno-psabi
② 在ORB_SLAM2文件夹或者Pangolin下的CMakeLists.txt中的顶部加入add_definitions(-w) 因为我编译Pangolin和ORB_SLAM2时都有一大堆warning,所以我两个位置的文档都加了这句话。
大概这样子:
在这里插入图片描述

总结一下:
实验室的服务器只有命令行界面,想跑ORB_SLAM2却显示了图形界面,会报这种错误:

terminate called after throwing an instance of 'std::runtime_error'
what(): Pangolin X11: Failed to open X display

想了好多方法,比如用端口把x11界面转到本地,安装了xshell+xmanager还有putty等等等一系列软件都没能成功地在本地显示界面,遂放弃。
如果是和我一样的朋友,可以把ORB_SLAM2/Examples/Monocular/mono_tum.cc中的这句话中的true改为false:

// Create SLAM system. It initializes all system threads and gets ready to process frames.
    ORB_SLAM2::System SLAM(argv[1],argv[2],ORB_SLAM2::System::MONOCULAR,false);

这样就不会去调用线程进行图形化处理啦!改完之后还要重新使用./build.sh编译一下子,这样就只会生成轨迹文档,然后我们想要评估的话就使用evo库的evo_traj 等命令来评估这个轨迹!
弄这个端口转发弄了好久都没成功,真的特别想看到ORB_SLAM2动起来的样子,就想在自己的破烂电脑上安装一个虚拟机来跑,所以就开始陷入漫长的编译之路。
从安虚拟机到编译opencv到编译Pangolin再到编译ORB_SLAM2,遇到了好多好多编译错误,最后总归还是成功了!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值