这个环境充满血泪,几点重要事项写在前面提醒自己:
1.安装环境之前一定先确认版本
2.安装不同库确认库之间的适配版本
3.做好文件备份
4.做好安装位置的记录
换版本心力交瘁,找不到路径抓心挠肝,缝缝补补到最后直接重新安装的,幸好用的docker在容器中操作,不然不知道要缝补到啥时候。。。在这种低级错误上浪费了好多时间,不过也算是搞清楚了Makefile.config CMakelist等的用法。
一、cmake
1.源码安装cmake:https://www.iteye.com/blog/dongbao100-1778204
2.更新cmake:删除原来的,源码安装新的,再软链接到/usr/bin:https://blog.csdn.net/u013714645/article/details/77002555
3.Cmake错误及解决:https://blog.csdn.net/felaim/article/details/71511909
4.cmake时cmakelist.txt中参数应用:
可以使用set设定库路径,防止cmake时产生find_package错误或import Error
以boost为例:https://www.jianshu.com/p/1827cd86d576
编译过程需要用到的头文件搜索路径保存在变量Boost_INCLUDE_DIRS中,所需要link的库文件路径保存在变量Boost_LIBRARIES中,也可通过设置BOOST_ROOT来设置首选的搜索路径(安装路径)
以上变量均可在环境变量~/.bashrc或特定CMakelist.txt中设置,举例如下:
(1)CMakelist.txt设定boost安装路径和caffe build路径
(2)环境变量:vim ~/.bashrc source ~/.bashrc
注:直接export只在当前会话有效,关闭再打开就会失效,所以推荐环境变量export
注意:配置环境变量source时报错:export `=' not a valid identifier 是因为路径加了空格,将等号或冒号两边的空格去掉即可
二、boost库
我pull的镜像是nvidia/cuda:8.0-cudnn6-devel-centos7,系统自带1.53.0版本boost和python2.7.5,安装其他版本之后一定记好安装目录,在环境变量中设置BOOST_LIBRARIES变量或者在要用到boost的程序的CMakelist.txt中设置Boost_ROOT变量
1.boost与cmake对应版本:
Boost 1.63要求CMake 3.7或更高版本。
Boost 1.64需要CMake 3.8或更高版本。
Boost 1.65,1.65.1需要CMake 3.9.3或更高版本。
Boost 1.66需要CMake 3.11或更高版本。
Boost 1.67需要CMake 3.12或更高版本。
Boost 1.68,1.69要求CMake 3.13或更高版本。
Boost 1.70需要CMake 3.14或更高版本。
我用的cmake3.4就只能安装Boost1.5x,一定注意版本适配,不然后续麻烦。
2.安装:https://blog.csdn.net/this_capslock/article/details/47170313
3.测试boost_thread报错:undefined reference to 'boost::system::generic_category'
原因为缺少boost_system库,编译时指令最后加上-lboost_system,
参考:https://www.cnblogs.com/afan/archive/2013/05/04/3060386.html
三、OpenCV
教程一大堆,比如https://www.jianshu.com/p/744269985eea
git源:https://blog.csdn.net/leaves_joe/article/details/67656340
说一下我遇到的问题:
1.动态库链接:/etc/ld.so.conf.d/opencv.conf 在此处设置的为最优先查找位置
2.远程调用OpenCV时不能跳出图形界面:https://blog.csdn.net/Rong_Toa/article/details/80365932
在Windows使用xshell链接服务器时,测试OpenCV报gtk错误:Gtk-WARNING **: cannot open display;
安装xming将服务器ip写入x0.host再在服务端export DISPLAY就好,注意如果用docker,写入的是容器的ip
3.ImportError解决:导入包时缺少东西需要安装某包,但是其依赖已经有低版本不能覆盖安装,此时报错:
ERROR: Cannot uninstall 'matplotlib'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall
例子:遇到numpy已经装过一个版本,其他库又依赖numpy时(比如scikit-image库)会报错,此时解决方式有三:
(1)强制安装:pip install numpy --ignore-installed
(2)卸载重装:pip uninstall numpy
(3)重装numpy:
查看位置可用site.getsitepackages(),输出['/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/Library/Python/2.7/site-packages'] ,把涉及到的numpy文件夹都删掉,再次执行pip install numpy
无此命令则可如下:
实践来看,升级不靠谱,直接强制安装忽略之前版本最简单有效。
4.解决ippicv下载时间过长问题,离线:ippicv_2019_lnx_intel64_general_20180723.tgz
https://blog.csdn.net/orDream/article/details/84311697
5.OpenCV路径问题:No package 'opencv' found
6.安装好python和opencv,却import cv2失败(环境变量问题)
在安装好CentOS和OpenCV后,在终端输入python,在输入import cv2。却报错:ImportError:Mo module named cv2.浏览Python下文件夹发现cv2.so。原因是没有添加相应路径。解决办法:
使用:find / -name "cv2.so" 全盘寻找
我找到的路径为:/usr/local/lib/python2.7/site-packages/cv2.so
终端输入:vi ~/.bashrc
在最下方输入 export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
保存。执行 source ~/.bashrc使路径立即生效。
在终端输入Python,输入import cv2.这次立即成功。
四、caffe安装
1.我安装时参考的文档,大同小异
centos:
https://www.mtyun.com/library/how-to-install-caffe-on-centos7
https://blog.csdn.net/chang_ge/article/details/52650982
https://blog.csdn.net/tuomen5867/article/details/94406903
https://blog.csdn.net/kongxx/article/details/79019624
https://www.cnblogs.com/qjoanven/p/7813957.html
注意:依赖包的安装&环境变量的修改
CUDA+cudnn:https://blog.csdn.net/abcx3261/article/details/86155257
Ubantu16:https://www.cnblogs.com/darkknightzh/p/5797526.html
Caffe安装可能错误:
https://blog.csdn.net/jessir/article/details/71195115
https://blog.csdn.net/m0_37407756/article/details/70789271
2.查找安装路径:locate、whereis、which、find、pkg-config
(1)报错:bash: updatedb: command not found
解决 :https://blog.csdn.net/yijiaobani/article/details/89175048 安装之后可以通过locate定位
(2)查看linux下的opencv安装库:pkg-config opencv --libs
查看linux下的opencv安装版本:pkg-config opencv --modversion
(3)查看linux下的opencv安装路径:sudo find / -iname "*opencv*"
(4)在全盘上不区分大小写,搜索带有关键字opencv的所有文件及文件夹都会输出到终端,如果输出太长建议输出到txt文件里查看,如:sudo find / -iname "*opencv*" > /home/ubuntu/Desktop/opencv_find.txt
3.Caffe cmake报错:Could NOT find Atlas (missing: Atlas_LAPACK_LIBRARY)
搜索出的修改Makefile.config处的BLAS=open不好使,最终的解决方法是cmake时加参数 -DBLAS=open
4.编译caffe可以用cmake或者直接make,而没用cmake编译caffe时,再编译其他应用caffe的程序可能报错,找不到CaffeConfig.cmake
解决:新建文件夹重新用cmake编译caffe;然后把/caffepath/build加入CmakeLists.txt的Caffe_DIR中,重新编译程序即可
此处我编译caffe建的文件夹叫release,Caffe_DIR就写的release,写自己安装目录的cmake目录
5.caffe的python接口编译:make pycaffe后进入caffe的python文件夹可以在python中import caffe。添加caffe/python到pythonpath环境变量可以在任何地方import caffe
6.安装caffe时 make all 报错:
$ make all
CXX/LD -o .build_release/examples/cpp_classification/classification.bin
/usr/bin/ld: .build_release/examples/cpp_classification/classification.o: undefined reference to symbol '_ZN2cv6imreadERKNS_6StringEi'
//usr/local/lib/libopencv_imgcodecs.so.3.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:565: recipe for target '.build_release/examples/cpp_classification/classification.bin' failed
make: *** [.build_release/examples/cpp_classification/classification.bin] Error 1
原因:Makefile.config中OPENCV_VERSION := 3 而不是3.4.3等具体版本
7.Python import caffe时报错:ImportError: No module named skimage.io
用pip安装scikit-image即可,skimage安装时遇到依赖包版本过低不能升级时先升级依赖包或者直接忽略已安装强制安装,则会直接升级。