RedHat系统更新GCC + 更换阿里镜像源yum +编译opencv +编译darknet

由于项目需要,在比较老的RedHat系统上进行项目展开,需要对自带的gcc4.7进行更新,由于校内网极差,踩过无数的坑,特意写下此篇博客用于记录;特意提醒,千万不能随意在根目录下安装自认为对的系统,极易引起不同版本间的冲突,我因此付出了大量的时间和精力!非常感谢张晨侃技术员和lemon姐的认真帮助,没有两位的帮助我也不可能脱坑!!!

安装GCC 4.8.4

  1. 安装GCC源码;
  2. 解压,并进行下载相关依赖项,网好的同学可以运行文件内的./contrib/download_prerequisites 脚本文件自动安装网络不好的同学则需要将gmp、mpfr、mpc三个依赖包自行下载并放到系统某个路径下,通过更改download_prerequisites内下载这三个文件的代码句注释,并更改解压文件路径即可,更改后的文件如下:
  3. .建立编译输出目录:
    mkdir gcc-build-4.8.4
  4. .进入输出目录,执行以下命令,并生成makefile文件:
    . cd gcc-build-4.8.4

…/gcc-4.8.4/configure --prefix=/opt/gcc-4.8.4 --enable-checking=release --enablelanguages=c,c++,fortran,java --disable-multilib

  1. 编译且安装
    make -j && make install

  2. 添加环境变量
    若想在系统内保持多个gcc版本,则:需将/usr/bin/目录下的gcc文件更改为gcc.bak,然后再 ln -s /opt/gcc-4.8.4/bin/gcc /usr/bin/gcc建立软连接,其中/opt/gcc-4.8.4/是gcc的安装路径;若要更换为原来的版本则将gcc.bak改回去就好了

  3. 测试gcc -v即可看到已经升级成功了!!!

glibc安装

  1. 解压,并且mkdir build && cd build
  2. ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
  3. `make -j && make install

libstdc++升级

rm -rf /usr/lib64/libstdc++.so.6 
cp libstdc++.so.6.0.20 /usr/lib64/ 
ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6

更换阿里镜像源yum

首先,Rednet的yum必须在他们官网上注册后才能使用,而且通过自带的yum源下载速度一般都是非常的慢,因此可以使用国内的镜像源,主要有阿里云,网易云等,本人使用的是阿里云镜像,更换的步骤如下:

  1. 删除rhel自带的yum源:rpm -qa|grep yum|xargs rpm -e --nodeps 再通过rpm -qa | grep yum查看是否删除干净;
  2. 下载新的yum安装包:
wget -c http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm
wget -c http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm 
wget -c http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
wget -c http://mirrors.163.com/centos/6/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm

由于这些rpm包小版本号会变更,所有复制此链接时,如果报404错误,请登入此网页并查看具体小版本号

  1. 安装yum包,注意先后顺序
#rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
#rpm -ivh yum-metadata-parser-1.1.2-16.el6.x86_64.rpm 
#rpm -ivh yum-3.2.29-81.el6.centos.noarch.rpm yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm 

最后两个包同时需要同时安装,否则会相互依赖;

  1. 进入/etc/yum.repos.d目录,将内部的文件全部移除
  2. 下载阿里云的数据源或者是163.com的数据源(二选一)wget -c http://mirrors.aliyun.com/repo/Centos-6.repo,并且
    把文件中所有的$releasever替换为6,可以使用该条语句:
:%s/$releasesever/6/g
  1. 清空缓存:yum clean all
  2. 重载缓存:最关键的地方,目前几乎所有教程都不会讲这一步,导致本人在这里被困了好久好久,一度都想重装系统了。。。。,一般直接进行重载yum makecache会一直报错,而且每次yum后在目录/etc/yum.repos/d/路径下都会生成一个redhat.repo的文件,这是注册后redhat埋下的一个暗坑,不管我们怎么替换镜像源,都会生成自带的Yum源文件,导致怎么替换都没用,解决办法就是找到
 /etc/yum/pluginconf.d/subscription-manage.conf

内的enable = 1修改为enable = 0保存后退出即可顺利替换国内镜像源;
`

编译opencv

yum不像apt-get一样可以直接下载各个依赖项,需要手动下载,最主要的依赖项就是ippicv_linux_20151201.tgz,在安装时会出现如下错误:

ICV: Downloading ippicv_linux_20151201.tgz...
CMake Error at 3rdparty/ippicv/downloader.cmake:73 (file):
  file DOWNLOAD HASH mismatch

    for file: [/home/dong/opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz]
      expected hash: [808b791a6eac9ed78d32a7666804320e]
        actual hash: [0880382389811547b83e9450d6c049f2]
             status: [28;"Timeout was reached"]

Call Stack (most recent call first):
  3rdparty/ippicv/downloader.cmake:110 (_icv_downloader)
  cmake/OpenCVFindIPP.cmake:243 (include)
  cmake/OpenCVFindLibsPerf.cmake:37 (include)
  CMakeLists.txt:558 (include)


CMake Error at 3rdparty/ippicv/downloader.cmake:77 (message):
  ICV: Failed to download ICV package: ippicv_linux_20151201.tgz.
  Status=28;"Timeout was reached"
Call Stack (most recent call first):
  3rdparty/ippicv/downloader.cmake:110 (_icv_downloader)
  cmake/OpenCVFindIPP.cmake:243 (include)
  cmake/OpenCVFindLibsPerf.cmake:37 (include)
  CMakeLists.txt:558 (include)

原因是downloader.cmake内的下载链接已经失效了(反正目前我是进不去那个网站),我们需要在网上下载ippicv_linux_20151201.tgz的文件,也可以百度云找,下载完后替换opencv-3.1.0/3rdparty/ippicv/downloads/linux-*目录下的同名文件,重新cmake即可;

编译darknet(without cuda and opencv)

遇到的主要问题是:-Ofast命令项出错,需要做的就是在make文件中将这一个选项去除即可,最后实验证明,没有GPU的加持,还是比较慢的,一帧图片需要将近3分钟才能检测出来。。。。

花了三天时间,终于把这个环境问题解决了,记下此篇博文,供所需之人参考~

你可能感兴趣的:(学习)