“一块儿作”系列完结后,我收到很多同窗给个人反馈。他们提了一些在程序编译/运行过程当中的问题。我把它们汇总起来,组成了这个“补充篇”。你也能够当作是一个Q&A。linux
此外,6,7两讲使用g2o,编译过程可能对新手来讲有些困难。如下是来自吴思颖同窗的反馈——感谢他力图使他的写做风格与我类似:c++
你们好,我是小萝卜,在跟随高帮主《一块儿作RGBD-SLAM》的道路上,步步坎坷,终于把帮主博客里的内容跑了个差很少,林林总总,各类问题,在诸位同窗的帮助下,虽然还不知其因此然,也算是解决了,下面把这些过程记录下来,但愿同窗们可以在《一块儿作》的道路上,少走弯路~git
在《一块儿作》的过程当中,主要遇到如下三个问题,我把各个问题的病症以及我认为的可能的缘由以及最终的解决方法都记录下来,你们慢慢看(须要说明的是,我是linux新手,不少的基本操做都不熟悉,所以你们可能会看到一些很奇葩的解决方法,见笑啦,进步嘛,老是不那么一路顺风,折腾,就是折腾!)~github
(一)《一块儿作》系列的(6)、(7)两篇源程序在编译时通不过,错误以下图ubuntu
该问题的具体缘由不明,你们揣测是库冲突,出如今使用从帮主博客《一块儿作6》里给出的g2o的地址下载的g2o源代码进行编译安装时,解决的方法是,使用帮主在qq讨论群里给出的g2o的压缩包进行编译安装。这个版本的g2o源代码,估计帮主会放在本身的github里,与《一块儿作》系列的源代码打包在一块儿供各位小萝卜们下载学习。(我已经更新了个人git)。缓存
(二)问题(一)的衍生问题,出现问题(一)并按照上述问题解决方案进行解决后出现运行g2o_viewer时的core dumped(或者cannot open library: libg2o_solver_eigen.so)问题,猜想缘由是以前编译安装的g2o的相关共享库没有清除干净,解决方法为:(1)删除/usr/local/include/g2o,指令为sudo rm -rf /usr/local/include/g2o;(2)删除/usr/local/lib下有关libg2o_*.so的库文件,先进入目录cd /usr/local/lib,而后挨个(可多个同时)删除sudo rm -rf libg2o_*.so libg2o_*.so libg2o_*.so(我一个一个删的我会说……)网络
(三)这个是和编译安装新源代码相关的问题,仍是和g2o有关,具体是个人系统是12.04的,昨天手滑点了更新,结果致使pcl_viewer 使用不了了,并且看提示好像不少pcl相关的库都出现了问题,因而,我重装了系统,而后再把相关的软件都安装后,g2o_viewer运行不了了,问题是error while loading shared libraries: libg2o_viewer.so: cannot open shared object file: No such file or directory, 经帮主指点,发现问题的缘由是在默认状况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,经过源码包进行安装时,若是不指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加 /usr/local/lib这个目录。这样虽然安装了源码包,可是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。网络上的解决方法是在/etc/ld.so.conf里添加绝对路径/usr/local/lib,做为一个新手,我实在不知道怎么样添加进去,用gedit编辑以后,不能保存,用echo /usr/local/lib >> /etc/ld.so.conf没反应,因而我就采用了奇葩方法:用gedit打开/etc/ld.so.conf,而后添加/usr/local/lib ,再把这个文件保存到home,而后sudo cp -i ld.so.conf /etc/ld.so.conf,以后,执行ldconfig(这一步是必须的,目的是利用ldconfig执行文件将 /etc/ld.so.conf的数据读入高速缓存中),再次运行g2o_viewer result_after.g2o(跑通《一块儿作7》,在data文件夹下生成的),成功!app
致谢:感谢博主&帮主&群主:半闲居士&高翔,感谢哈工程的群友邢会明(问题2的解决方案是由邢同窗提供的,咱们俩遇到的问题都同样,估计小伙伴们也会在《一块儿作》的时候遇到);函数
网络资源:linux共享库,以及/etc/ld.so.conf文件的应用 (http://blog.csdn.net/oathevil/article/details/13564213)工具
/etc/ld.so.conf 文件介绍(http://blog.csdn.net/yjkwf/article/details/7545002)
/etc/ld.so.conf和ldconfig, PKG_CONFIG_PATH
(http://blog.csdn.net/allwtg/article/details/5145306)
最后,若是读者朋友在运行此系列代码时遇到困难,请联系我。若是您的问题很典型,我会更新到这一篇中。
祝你们科研顺利!
2015.9.22 更新
如下是来自中科院张慧娟同窗的反馈:
“一块儿作系列”问题总结
小萝卜2号 2015/9/22
你们好,我是小萝卜2号,喜欢看霹雳五号、黑客帝国、人工智能、机器管家、机械公敌、机械姬、终结者……最近,迷上了群主的“一块儿作”系列,跌跌撞撞,终于把博客里的内容跑了下来,固然长跑中遇到很多问题,多方寻求,获得解答。在此,小萝卜2号把过程记录下来,但愿对各位小萝卜N号有所帮助。因为小萝卜2号所懂很少,如有不对的地方,请你们指正,补充,小萝卜2号会不断改进哦。(“一块儿作8”中已经给出了6和7讲编译程序时遇到的三个问题,我也遇到了,参考8,这里再也不赘述。)
这里以问答形式描述了整个过程,总结了9点。(尝试嘛,总会磕磕绊绊)
Q:用的系统是什么版本?
小萝卜2号:我使用的系统是Ubuntu14.04 for ros(indigo),与群主的Ubuntu12.04不一样,是易科机器人社区发布的镜像,网上可下载到。提供一个网址:http://blog.exbot.net/archives/1206 小萝卜2号同时是ros使用者,因此用U盘刻录,而后安装,若有不懂,可到网上搜索具体安装过程。这个镜像对于使用ros 的初学者很是方便,里面装好了集成环境,没必要浪费不少时间去配置软件,想用ros又想节省时间的小萝卜N号们能够考虑下。
Q:Ubuntu14.04和Ubuntu 12.04的区别是什么?
小萝卜2号:这里咱们要讲下依赖问题。在跑群主程序过程当中,咱们用到三个库opencv、PCL和g2o,而安装它们通常都须要系统依赖库,所以须要首先安装各类依赖项。系统版本不一样,依赖库不一样,而咱们用到的库是基于某个依赖库开发的,其余版本(如高版本)的依赖库可能不识别,致使没法编译成功。所以,建议安装时参考库的说明文档,有安装要求和步骤,尽可能按照说明安装。
Q:OpenCV的版本?
小萝卜2号:我用的是opencv2.4.10,默认安装方式。群主说2.4系列差异不大,而3.0系列则在接口上有一些明显改动,可能须要修改源码。我的以为,2.4.9和2.4.10没差异,无影响。
Q:PCL 安装问题?
小萝卜2号:我开始用的是Ubuntu12.04,在用命令行安装PCL时,提示找不到依赖项,缺缺缺……因而采用源码安装(参考古月居的博客http://blog.csdn.net/hcx25909/article/details/8651840),装了依赖库,缘由未知,仍是编译通不过,缺依赖项,缺缺缺……源码安装行不通,果断改装系统,Ubuntu14.04 for ros(indigo),简单又粗暴吧,以后再用三句命令行安装PCL,彻底没问题。建议:若是非要用源码安装,每一个人电脑配置不一样,遇到的问题不一样,若实在解决不了,就忍痛割爱,系统重来。
Q:g2o安装问题?
小萝卜2号:对于g2o,最好是用群主github中提供的,通常Ubuntu12.04编译没有问题。我尝试了三种方法,一一解析。(1)不过个人Ubuntu14.04中libQGLViewer有问题,libqglviewer-qt4-dev安装不了,尝试下载debin安装,依然会提示缺乏依赖项。(2)因此干脆舍弃g2o的可视化模块g2o_viewer,安装cmake-curses-gui这个包,经过gui来选择想编译的g2o模块, 找到build apps,enter键修改状态为off,make,继续sudo make install,安装相应的lib、头文件、执行文件。缺乏显示模块,只是没法用g2o显示图像,不过该有的数据仍是都有的。(3)另外,若官网上下载最新g2o,参考安装说明文档,在Ubuntu14.04中编译也能神奇经过,可是在跑“一块儿作6和7”时,提示错误:core dumped。重启系统,始终不行,缘由未知,考虑是库冲突。因此不推荐。
尝试安装libqglviewer-qt4-dev_2.3.4.4_amd64.deb的过程当中的错误,你们能够清楚看到n重依赖以及相互冲突:
Q:用PCL的cloudviewer把点云显示出来,为何会是上下颠倒?
小萝卜2号:关于图像上下翻转问题,是由于opencv定义的坐标系和pcl_viewer显示坐标系不一样,opencv是x右y下,而pcl显示是x右y上。解决方法:找到群主程序image2PointCloud函数中,把计算点空间坐标的公式的p.y值添加负号,这样y方向就能够正常显示了,so easy。(或许还有别的方法)
(图片上下翻转)
Q:文件路径问题
小萝卜2号:上面的错误是跑3时的一个提示,是说没有读到数据,没有点云。读取的parameters.txt以及存储的点云数据,最好给出具体的路径。如:/home/document/RGBD_tutorial/part3/code/data/,这样程序才能读取到数据或者保存到正确的文件夹里。
Q:在编译6和7时遇到c++11不兼容的问题?
小萝卜2号:
在确保程序编译经过,而在运行时遇到c++0x_warning.h:32:2 error,我曾尝试在CMakeLists.txt中添加一段代码,然并没卵用,或许有人能够的(可尝试)。参考:http://blog.csdn.net/zyh821351004/article/details/46521319
添加的代码:
多半是由于用的不是群主github上提供的g2o版本,因而g2o重装,程序顺利运行,听着机子跑程序时哗哗的声音,是否是心里无比高兴。
Q: 在cmake时会出现相似的WARNING?
小萝卜2号:注意这个是warning,不是error,不影响编译。缘由多是cmake里的find_package命令把/usr/lib给找出来了,引起了warning。(群主告诉偶滴,直接忽略)
很是感谢群主及各位提供帮助的小伙伴,但愿对遇到类似问题的小萝卜N号们有帮助。
-- 个人反馈:
ubuntu 1404下是能够用g2o_viewer的,只要你手动把依赖项配好。一共有三个依赖项,配好以后g2o_viewer照常使用: