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

来源:互联网 发布:室内设计师必备软件 编辑:程序博客网 时间:2024/05/21 18:47

在ubuntu1604 编译Kintinuous,具体安装步骤可见作者的github https://github.com/mp3guy/Kintinuous 和 另外一篇博客 http://blog.csdn.net/u011988573/article/details/57410019。

出现的问题: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函数内;参考 http://blog.csdn.net/yangzhiloveyou/article/details/7935078;

另外如果ubuntu想用 opencv2 和opencv3 ,可以将某一个安装到默认路径(/usr/local/lib 和 /usr/local/include)中,另一个安装到自定义的路径,在 cmake 的时候 -D CMAKE_INSTALL_PREFIX=xxx:使用方法见 http://blog.csdn.net/heroacool/article/details/51055322;

如果编译过程出现 找不到 opencv_dep_cudart,在编译kintinuous的时候加入 -D CUDA_USE_STATIC_CUDA_RUNTIME=OFF;

0 0