红联Linux门户
Linux帮助

ubuntu 16.04运行kintinuous出现的问题及解决方案

发布时间:2017-05-16 16:01:58来源:linux网站作者:bitsu
在ubuntu16.04 编译Kintinuous,具体安装步骤可见作者的github https://github.com/mp3guy/Kintinuous 和 另外一篇:http://www.linuxdiyf.com/linux/30822.html
 
出现的问题:Error in `./Kintinuous': double free or corruption (fasttop): 0x00007f18f8002140 ***。
 
问题是对内存操作出现问题,可能是两次释放或者冲突,但是如果从程序入手,debug首先很难定位到问题的地方,其次根据很多人使用并未出现该错误,所以程序出问题可能性不大(事实证明原作者程序并没有问题)。
 
那问题出现在哪里呢?答案是OpenCV的兼容性问题,Kintinuous 依赖的库包含DLib,按照博客中下载的DLib是最新版本,在编译过程中需要依赖Opencv3,而Kintinuous只能依赖Opencv2 ,而opencv2 和 opencv3 在cv:: mat内存管理上可能存在问题,出现上述的错误(个人猜测)。
 
解决办法:下载低版本的DLib,也就是DLib-1.0,网址:https://github.com/dorian3d/DLib/releases/tag/v1.0 ;重新编译即可。注意,在编译过程中需要指定Opencv2版本(如果ubuntu系统装了不同版本的opencv的话)指定方法:在find_package 前加入set(CMAKE_PREFIX_PATH " "),引号内为opencv2的路径。
 
Ps:之所以发现内存问题是由于opencv版本兼容性引起的,是用了valgrind 检查内存,发现保存的位置在opencv函数内;参考:
ubuntu 16.04运行kintinuous出现的问题及解决方案
ubuntu 16.04运行kintinuous出现的问题及解决方案
 
另外如果ubuntu想用 opencv2 和opencv3 ,可以将某一个安装到默认路径(/usr/local/lib 和 /usr/local/include)中,另一个安装到自定义的路径,在 cmake 的时候 -D CMAKE_INSTALL_PREFIX=xxx:使用方法见:http://www.linuxdiyf.com/linux/30823.html
 
如果编译过程出现 找不到 opencv_dep_cudart,在编译kintinuous的时候加入 -D CUDA_USE_STATIC_CUDA_RUNTIME=OFF;
 
本文永久更新地址:http://www.linuxdiyf.com/linux/30824.html