无法连接校外网,意味着我们无法通过简单的指令直接从网上下载依赖包,这时候比较笨的方法是手动一个个下载依赖包,然后上传到我们的服务器。本文另有方法。
官方文档依赖条件(可以对比参考)
根据以下条件检查依赖包是否安装:(以下每一项都需要检查 Yum list xxxx 检查是否安装 )
autoconf automake cmake freetype-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel
为了支持GUI特征 gtk2-devel
为了支持摄像头 libdc1394-devel libv4l-devel
为了支持视频媒体 ffmpeg-devel(一般的源中找不到该包,需要添加源) gstreamer-plugins-base-devel
图形文件解码库更新
libpng-devel libjpeg-turbo-devel
jasper-devel openexr-devel(未安装)
libtiff-devel libwebp-devel(未安装)
ipp_icv 这个东西是一个并行计算库,在编译的时候如果没有这货,就会编译不通过。(去网上下载相应的包,解决问题,下文提到)
tbb-devel 线程构建模块 Intel’s Threading Building Blocks (TBB),是Intel公司开发的并行编程开发的工具。
eigen3-devel 矩阵计算 Eigen是一个开源的C++矩阵计算工具
由于无法连接校外网,所以国内国外镜像均无法使用,这里提出的解决办法是,找一台可以联网的电脑,虚拟机上装centos系统,然后通过yum,直接处理包的依赖关系,可以通过yum下载所有依赖关系的离线包,然后上传到我们的集群中,直接批量处理。
1.进入到源的目录下
/etc/yum.repos.d/
查看当前源
yum repolist
2.备份当前源,并将新的源拷入
mv CentOS-Base.repo CentOs-Base.repo.bk
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
3.清除缓存重建源
yum clean all
yum makecache
4.安装EPEL_Release,因为安装需要使用其他的repo源,所以需要EPEL支持
yum install -y epel-release
如果出现缺少Code提示,可以:
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
5.安装Nux-Dextop源
导入一个Code
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
安装nux-dextop源
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
获取ffmpeg本省及其所有的依赖包
yum -y install ffmpeg --downloadonly --downloaddir=.
注意上面这行代码,是我们安装的关键,之前所有需要检查的依赖包,出现缺失的情况下,一个包可能又需要很多依赖包,这条指令可以直接将所有包下载下来,我们只需将下载好的包转移,批量安装,就可以完美解决我们没有网络的问题。同时可以下载多个包,只需要空格隔开。
安装所有依赖包
rpm -Uvh --force --nodeps *.rpm
https://github.com/opencv/opencv/releases/tag/3.2.0
下载源码包,执行以下命令
tar xvf opencv-3.2.0.tar
cd opencv-3.2.0
mkdir build
cd build
先Cmake一次(/opencv/opencv-3.2.0/填写你自己正确的路径,我自己在外面建了一个文件夹)
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/opencv/opencv-3.2.0/ ..
此时会发现Cmake停在了下面这个位置,直接用Ctrl+C停掉当前的Cmake
– checking for module ‘libgphoto2’
– package ‘libgphoto2’ not found
– ICV: Downloading ippicv_linux_20151201.tgz…
进入下面这个文件夹
opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e
会发现ippicv_linux_20151201.tgz文件,删除该文件
rm ippicv_linux_20151201.tgz
然后将上面ipp_icv下载中下载的文件放在这个文件夹下。
重新使用上面的命令Cmake一次。这一此Cmake不再卡在上面的阶段,但是报错。
我去网上找相关信息,找到一篇国外的博客,一样的问题,提示去下载Intel MKL(下载,序列号获取,参考我的另一篇博客:http://blog.csdn.net/a13326021319/article/details/73603370)
下载 上传好之后,执行下面语句
tar zxvf l_mkl_2017.0.098.tgz
cd mkl_2017.0.098
sudo ./install.sh
安装过程中注意看提醒,输入前面得到的序列号,除此之外一路都是默认安装
如果直接执行安装,可能因为没有联网的关系,一直提示数字许可证过期。
根据提示,如下执行安装
再尝试cmake执行编译,这次,编译成功!!!
make 编译,后面的参数 -j8指的是我的cpu有8线程,这个提议提高编译的效率。大家需要根据自己的CPU的线程数来确定这个值。当然,直接make也没问题,就是慢一点而已。
sudo make -j8
make过程依然会报错
去网上找相关错误,发现国外的论坛,针对性补上x264及其依赖包(方法同上,虚拟机下载,批量安装)
继续,依然报错
[ 40%] Built target opencv_cudafilters make: * [all] Error 2。(上面的方法没有解决问题)
仔细查看上面的报错信息,发现上面就有错误,试着解决
网上找到一篇博客
https://stackoverflow.com/questions/44038198/opencv-3-0-0-install-error-on-centos7
完全一样的错误。按照它里面的说法,需要将最新版本的jasper-devel-1.900.1-30.el7变回之前的版本jasper-devel-1.900.1-29.el7,虚拟机上centos下载到相应的包,上传,安装。
继续make
进行到这一步,卡了特别特别久
耐心等待就行(比较久)。
最终!!!!!终于编译成功!!!!!
最后一行命令:
sudo make install
完成,最后进行验证,Build文件夹下进lib文件夹,查看cv2.so是否存在,如图所示,存在
再进行下一步:
ln cv2.so /usr/lib64/python2.7/site-packages
在当前centos下是在这个路径下,不同的系统不同的安装路径需要调整红色部分位置
再在python内验证