走过的坑都不会白走的,及时记录,总结反思;
这几天总是在caffe安装编译中反复纠缠,无谓消耗时间,简单记录,以未来借鉴。
参考文章:
https://blog.csdn.net/babytang008/article/details/78631776
https://blog.csdn.net/oppo62258801/article/details/60333355
安装重点步骤
- 显卡驱动官网查询确认后安装,使用runfile,禁用noueav,安装时加入–no-opengl
- CUDA安装时不需要额外装驱动,安装完记得测试
- opencv安装使用cmake-gui简单些,安装时出错重新再来几篇就行
- caffe安装坑很多,从makefile.config的配置,makefile的修改,链接库的添加,anaconda的冲突等都会出现
- matcaffe编译和mattest容易出错,重点在于,matlab中软连接库(libstdc++,libopencv库都需要指向系统库)备份后重新生成
记录caffe和matlab常出现错误和解决方法
Problem1.
caffe installation : opencv libpng16.so.16 linkage issues
method:
cd /usr/lib/x86_64-linux-gnu
sudo ln -s ~/anaconda/lib/libpng16.so.16 libpng16.so.16
sudo ldconfig
Probelm2.
make all -j4make过程中出现找不到lhdf5_hl和lhdf5的错误
解决方案:
在计算机中搜索libhdf5_serial.so.10.1.0,找到后右键点击打开项目位置
该目录下空白处右键点击在终端打开,打开新终端输入
sudo ln libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
最后在终端输入sudo ldconfig使链接生效
原终端中输入make clean清除第一次编译结果
再次输入make all -j4重新编译
Problem3.
问题 usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory
解决方案
$make clean
$export CPLUS_INCLUDE_PATH=/usr/include/python2.7
$make all -j8
原因:
python路径都改为了anaconda的路径,但是CPLUS的path没有设置,系统中我也没把anaconda设置成默认的python导致的。
Problem4.
系统:ubuntu11.04出现error while loading shared libraries: libjpeg.so.8,这主要是程序无法找到动态链接库!!
解决的方法之一:把你安装的 libjpeg 库下的 libjpeg* 链接到 /usr/lib。
命令如下:ln -s 你的libjpeg库的安装目录/libjpeg* /usr/lib
比如,我的 libjpeg 库安装在 /root/tmp/jpeg 下,则所用命令为:ln -s /root/tmp/jpeg/libjpeg* /usr/lib
之后再运行你的程序,应该就没问题了。
注:我的系统是开启了root 用户的,所以命令在运行时没有加 sudo,其他人则视情况而定。
关于caffe编译出现libcaffe.so问题的,可能是protobuff,解决方法:
https://blog.csdn.net/e01528/article/details/79532462
Problem5:
错误描述:如上图显示,未定义的引用“TIFFReadRGBAStrip@LIBTIFF_4.0”,说明是libtiff库未指明,
解决办法:执行下面命令操作查找对应库路径,并添加
$ldconfig -p|grep libtiff #这个指令是查找库索引
$ export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/ #这个指令是将路径添加至配置文件中
然后再编译make all,就可以继续进行下面测试了。
$make clean # 清理上次编译错误记录
$make all -j8
Problem6:
linux下Matcaffe调用及库链接问题的解决(mattest不通过)
Problem6-1:
MEX-file,’/home/flyingbird/Downloads/caffe-master/matlab/+caffe/private/caffe_.mexa64’无效:
/home/flyingbird/Downloads/caffe-master/matlab/+caffe/private/caffe_.mexa64:
undefined symbol:
_ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE。
![](/qrcode.jpg)
出错 caffe.set_mode_cpu (line 5)
caffe_(‘set_mode_cpu’);
出错 caffe.run_tests (line 6)
caffe.set_mode_cpu();
6-1 解决方法:
具体的方法基本思想是找到matlab和caffe所依赖的这些库的位置,然后通过某种方式建立连接即可。
1 找到matlab中这些库的位置
libstdc++.so.6:它在matlab中的位置时 matlab/sys/os/glnxa64/中
libopencv_core.so.2.4,libopencv_highgui.so.2.4,libopencv_imgproc.so.2.4:matlab/bin/glnxa64中
而且通过ls libopencv_* -l 命令可以看到这些库通过链接的都是这个文件夹中自己的库。
2 找到caffe所依赖的这些库的位置
这四个库资源都是在:/usr/lib/x86_64-linux-gnu中
3 进行链接
1)首先需要备份或删除matlab中的那几个库的软链接,建议备份,命令如下:
Sudo mv /home/xaver/local/MATLAB/sys/os/glnxa64/ libstdc++.so.6 /home/xaver/local/MATLAB/sys/os/glnxa64/ libstdc++.so.6
注意以上路径并不一定就是你的路径,物理意义上表示的是你的matlab所安装的路径
Problem6-2:编译mattest
测试下编译好的matcaffe是否能用——在这一步一般不会编译成功,这里需要修改两个领域共计四个库的链接。其原理是因为matlab与caffe通过接口进行编译的过程中,两者所引用的库应当指向同一个即可
Problem6-2解决方法:
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_core.so.2.4
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_highgui.so.2.4
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4 /usr/local/MATLAB/R2016b/bin/glnxa64/libopencv_imgproc.so.2.4
Problem6-3:
uname: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
sed: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
getconf: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
awk: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
awk: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
/usr/local/MATLAB/R2016b/bin/glnxa64/MATLAB: /usr/local/MATLAB/R2016b/bin/glnxa64/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4)
Problem6-3解决方法:
编译make matcaffe后,执行make mattest后,往往出现“Invalid MEX-file"问题,其原因是MATLAB和linux的库冲突,解决的方法是用linux的库(在编译caffe之前大家的opencv等库肯定也早已装好了)
大部分的解决方法是通过export LD_LIBRARY_PATH和 LD_PRELOAD来链接,但是效果不好。最后发现,只有直接去MATLAB下面删除库并重新链接到x86_64-linux-gnu的方法是最好的。具体方法如下:
1.不需要降级gcc和g++,就用linux的自带版本,否则caffe编译不一定通过。我的是14.04的5.4(千万不要先用5去编译caffe再降级用4.4编译matcaffe)
2.不要去用改LIBRARY_PATH的方法,因为很可能不成功,尤其是有倒霉催的anaconda的情况下。
3.找到你的linux库的位置(一般是/usr/lib/x86_64-linux-gnu/)以及MATLAB库的位置(默认是/usr/local/MATLAB/R2014a/sys/os/glnxa64/)。然后写个sh执行下列操作
rm -rf /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_core.so.2.4
ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4.9 /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_core.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_imgproc.so.2.4
ln -s /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.2.4.9 /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_imgproc.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_highgui.so.2.4
ln -s /usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.9 /usr/local/MATLAB/R2014a/bin/glnxa64/libopencv_highgui.so.2.4
rm -rf /usr/local/MATLAB/R2014a/bin/glnxa64/libfreetype.so.6
ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6 /usr/local/MATLAB/R2014a/bin/glnxa64/libfreetype.so.6
参考文章:https://blog.csdn.net/luanmaqianzhao/article/details/54669860
“`python
总结
耐心修改,认真调试,注意出错最后给出的提示,分析常见出错的软链接报错提示,掌握软链接使用方法,应该能解决常见问题!