Centos6.8 安装dlib库时出错【升级gcc 到4.9.0以上】

Stella981
• 阅读 848

在centos6.8上安装dlib库时出现错误:

1、CMake must be installed to build the following extensions: dlib

没有安装CMake,需要安装CMake,如 yum install cmake

2、Unsupported compiler -- pybind11 requires C++11 support!

gcc版本低,centos默认版本为4.4.7,需要升级到4.8以上,因为gcc 4.8.0及以上版本才会支持c++ 11的特性

3、fatal error: Python.h: No such file or directory

  需要安装python-dev(安装了python环境为什么还要安装python-dev,因为linux发行版通常会把类库的头文件和相关的pkg-config分拆成一个单独的xxx-dev(el)包,比如:需要自己安装一个源外的python类库, 而这个类库内含需要编译的调用python api的c/c++文件则需要安装python-dev,安装的dlib需要这个头文件),Centos安装 python-dev包提示No package python-dev available:出现此问题的原因是python-dev的包在Centos的yum中不叫python-dev,而是python-devel,所以使用下面的命令即可安装python-dev, yum install python-devel。

4、cc1: error: unrecognized command line option "-std=gnu++11"

升级的gcc没有生效,需要配置新安装的gcc的路径,详细过程见文尾。

升级gcc

使用yum安装gcc

对于配备了yum的Linux发行版而言,安装gcc编译器就变得so easy。我们只需要分别执行如下命令即可:

1 ##安装 gcc、c++编译器以及内核文件
2 yum -y install gcc gcc-c++ kernel-devel

自行安装gcc

不过使用yum安装的gcc并非当前的最新版本,Centos6 yum 默认安装的gcc版本为4.4.7 (gcc 4.8开始全面支持C 11和C++ 11的新特性)。如果我们想要安装最新版本的gcc,那么就需要自行安装gcc。

笔者初次安装gcc时,在网络上搜寻了大量的gcc安装配置教程,许多教程的内容非常之多,结果把自己搞晕了,编译安装的时候还老是出现各种错误。最后查阅官方文档才发现,自行安装新版本的gcc并不复杂,根本没有那些教程中说的那样繁琐(有些教程居然还要修改几个配置文件)。

下载gcc安装文件

在安装gcc当然要先拿到gcc的安装文件。在这里我们直接通过官方下载gcc-4.9.0.tar.bz2(86 MB)。当然,你也可以下载gcc-4.9.0.tar.gz(110 MB),不过该压缩文件要大出不少。

wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.9.0/gcc-4.9.0.tar.bz2

 编译前的准备工作

想要安装gcc 4.8及以上版本,你需要先安装C标准库和头文件,以及旧版本的c++编译器。如果你的计算机中没有这些,请执行以下命令(当然你也可以使用apt-get等其它方式进行安装,如果已经安装则无需再次安装):

#安装C和C++的静态库
yum install -y glibc-static libstdc++-static
#安装旧版本的gcc、c++编译器
yum install gcc gcc-c++

 在这里,我们将gcc-4.9.0.tar.bz2解压到/usr/local/src目录中(当然你也可以指定其他目录),完整的tar命令为:

#解压gcc安装文件
tar jxvf gcc-4.9.0.tar.bz2 -C /usr/local

 解压后gcc源程序的根目录就是/usr/local/gcc-4.9.0。接着,我们依次执行如下命令:

#转到gcc源程序根目录
cd /usr/local/gcc-4.9.0
#下载一些必备的依赖程序
./contrib/download_prerequisites

 安装gcc需要下载诸如gmp、mpfr、mpc等依赖文件,执行download_prerequisites将会自动下载这些软件并解压到当前目录(文件不大,总共只有几MB,请耐心等待下载)。

编译安装gcc

接着,就可以对gcc进行编译安装了。在此之前,我们先创建一个目录 mkdir /usr/local/build/gcc-4.9.0(你也可以自行指定其他目录)用于存放编译后的程序文件。然后我们依次执行如下命令:

#跳转到编译后的程序文件存放目录
cd /usr/local/build/gcc-4.9.0
#调用gcc源程序的configure(后面的参数选项可根据需要自行修改),用于配置gcc
/usr/local/gcc-4.9.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
#编译gcc源程序
make
#安装gcc
make install

 其中执行make命令这一过程耗费的时间可能非常多,笔者这里耗费了20多分钟才编译完成。执行完上述命令后,我们的gcc就已经安装成功了。

与其他教程不同的是,本教程并没有对gmp、mpfr、mpc等软件分别进行解压和编译,而是直接由download_prerequisites负责下载并解压,最后和gcc一起进行编译安装,这也是官方推荐的做法(download_prerequisites还会根据实际情况决定是否启用Graphite循环优化)。

如果你的Linux无法直接联网,那么你只能打开文件download_prerequisites,获取到这些文件的下载链接,然后通过其他上网设备下载这些软件。最后把这些软件直接解压到gcc源程序目录(/usr/local/src/gcc-4.9.0)下即可。

配置gcc 的路径:

find / -name "libstdc++.so*"

# cd /usr/lib64

# mv libstdc++.so.6 libstdc++.so.6.old

# cp /usr/src/gcc-6.4.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 . #将新安装的gcc文件下的 libstdc++.so.6.0.22 复制到/usr/lib64文件下

# ln -sv libstdc++.so.6.0.22 libstdc++.so.6

查看版本

gcc --version

 Reference:

[1] https://blog.csdn.net/HEHUANLUOLUO/article/details/79152622

[2] https://robbiefeng.iteye.com/blog/2163305

[3] http://blog.techbeta.me/2015/10/linux-centos6-5-upgrade-gcc/

[4] https://www.linuxidc.com/Linux/2017-10/147256.htm

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这