之前想在centos系统上安装clang 3.6版本,由于yum上版本太低,想通过源码编译安装。按照网上说的源码安装步骤,下好llvm、clang、clang-tools-extra和compiler-rt后,总在make install的最后一步安装失败。为了找到解决办法,去查llvm.org官网信息,结果发现从clang 3.8开始官网开始提供适于centos 6版本的二进制版本:Clang for CentOS 6 x86_64 (.sig) 果断下载二进制版本,解压并cd到bin目录,运行clang --version命令,出现以下提示信息:

clang: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by clang)
clang: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by clang)

这里是两个系统版本库版本过低的问题,一个是关于C++的库libstdc++, 一个是关于C系统基础运行库GLIBC。

1. 先解决GLIBCXX的问题,C++库,首先查看错误信息提示中的lib文件的信息。

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC这里是打印 libstdc++.so.6的输出信息中限定(grep) GLIBC库的信息

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

再查gcc版本,发现是4.4,确实比较旧,先升级gcc版本。

由于公司机房网络限制不能上外网,安装gcc比较曲折。先通过别的方式准备好gcc的安装包gcc-4.8.2.tar.gz。解压gcc-4.8.2.tar.gz到当前目录下,并进入gcc目录,如果有网络,运行./contrib/download_prerequisites文件可以直接帮我们安装依赖,没有网络的话,查看/contrib/download_prerequisites文件,里面主要是下载安装三个文件:mpfr/gmp/mpc。这里只能自己手动安装。

分别下载mpfr/gmp/mpc三个文件,并解压安装。由于mpc依赖于mpfr和gmp,mpfr依赖于gmp,故安装顺序依次为gmp、mpfr、mpc。

gmp-4.3.2.tar.bz2

mpfr-2.4.2.tar.bz2

mpc-0.8.1.tar.gz

编译安装gmp

$tar -jvxf ~/gmp-4.3.2.tar.bz2

$cd gmp-4.3.2

$./configure --prefix=~/gcclib/gmp432(自定义配置路径)

$make && make install

编译安装mpfr

$tar -jxvf ~/mpfr-2.4.2.tar.bz2

$cd mpfr-2.4.2/

$./configure --prefix=~/gcclib/mpfr242 --with-gmp=~/gcclib/gmp432/ (依赖于gmp)

$make && make install

编译安装mpc

$tar -zxvf ~/mpc-0.8.1.tar.gz

$cd mpc-0.8.1/

$./configure --prefix=~/gcclib/mpc081 --with-gmp=~/gcclib/gmp432/ --with-mpfr=~/gcclib/mpfr242/ (依赖于gmp与mpfr)

$make && make install

编译安装gcc

$tar -zvxf ~/gcc-4.8.2.tar.gz

$cd gcc-4.8.2

$./configure --prefix=~/gcc482 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=~/gcclib/gmp432/ --with-mpfr=~/gcclib/mpfr242/ --with-mpc=~/gcclib/mpc081/

解释一下参数:

--enable-threads=posix//可用线程

-disable-checking//禁用检查

--disable-multilib//默认gcc 能在32位系统上将代码编译成64位程序,或者在64位系统上编译成32位程序,如果加上这个编译选项则表示关闭这个gcc的交叉编译功能。

--enable-languages //指定 gcc 能编译哪些语言的文件,每种语言用逗号分隔, 例如 c,c++,Java

详细的参数介绍可以在官网看到:https://gcc.gnu.org/install/configure.html

$如果此时执行"make"命令的话,那后果会相当的痛苦,默认安装情况,所有lib共享库都会被放到系统目录下如64位的/usr/lib64/,而我们手动指定目录的形式,系统在编译构建的时候是找不到的,就是说GCC找不到之前我们安装的三个lib库,so我们这样做,即使没权限,仍可以建立全局的临时路径

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/gcclib/gmp432/lib:~/gcclib/mpfr242/lib:~/gcclib/mpc081/lib(保证原有的参数正确,加上新的共享路径,用冒号分隔)

$make(需要时间较长)

$make install

$~/gcc482/bin/gcc -v (查看安装版本,验证是否安装成功)

安装完成后再建立软链接即可。

2.升级GLIBC_2.15'

glibc的下载地址:http://ftp.gnu.org/gnu/glibc/

或者:http://www.gnu.org/software/libc/download.html

------------------------------------------------------------------------

安装:

下载的glibc的源码解压到某个目录,并进入源码目录 建立构建目录,并cd进入构建目录:

$ mkdir build

$ cd build

配置:

运行configure :

$ ../configure --prefix=/opt/glibc-2.15

$ make -j4

$ sudo make install

临时修改环境变量:

$ export LD_LIBRARY_PATH=/opt/glibc-2.15/lib:$LD_LIBRARY_PATH

安装完成后,运行clang不再报错。

centos上源码安装clang 3.8的更多相关文章

  1. 在CentOS上源码安装Nginx

    总步骤: wget http://nginx.org/download/nginx-1.10.1.tar.gz tar -xvf nginx-1.10.1.tar.gz cd nginx-1.10.1 ...

  2. 在 CentOS 下源码安装 Xen

    http://www.vpsee.com/2010/04/install-xen-on-centos-from-source/ 在 CentOS 源码编译安装 Xen 的过程和在 Debian 上编译 ...

  3. CentOS下源码安装Apache2.4+PHP5.4+MySQL5.5

    一.准备(把所有的源文件放在‘/home/yuanjun’目录下) apr http://mirror.bjtu.edu.cn/apache/apr/apr-1.4.6.tar.gz apr-util ...

  4. CentOS下源码安装vsftpd-3.0.0,并设置指定用户访问指定目录(附带完整配置文件)

    1.卸载系统已经存在的ftp服务器 因为是源码安装,所以不能通过rpm -qa的方式查看是否已经安装ftp服务器,可以通过find / | grep vsftp*方式查看系统中存在哪些与vsftpd相 ...

  5. [原创]在Centos7.2上源码安装PHP、Nginx、Zentao禅道

    版本 操作系统:CentOS Linux release 7.2.1511 (Core) PHP:5.6.33 Nginx:1.12.2 MySQL:5.6.38(192.168.1.103的Wind ...

  6. Centos6.6上源码安装Nodejs V4版本

    本来就是想在vps上装一个Ghost博客,这个博客依赖的是Nodejs,然后推荐的是V4版本.然后我就对着官网的步骤安装,发现根本没有Centos6 i386的资源了(64位的还是有的), 我只能在那 ...

  7. 在CENTOS上源码搭建LNMP环境

    前言 1.操作前提: CentOS Linux release 7.5.1804: sudo用户(需要root权限): 2.需要安装的组件: nginx稳定版:nginx-1.14.0: MariaD ...

  8. Centos下源码安装git

    1.centos下git版本太久了,才1.8几,而官方更新的还是很活跃的,于是我就想源码安装一个新版本. 2.首先到: https://github.com/git/git/releases 下载最新 ...

  9. centos环境源码安装postgresql9.4

    源码安装简要步骤 下载PostgreSQL 源码包  下载根目录地址:http://ftp.postgresql.org/  本人选择的是当前最新版本v9.4.1:http://ftp.postgre ...

随机推荐

  1. Archive for required library xx cannot be read or is not a valid ZIP file

    原因:maven下载的jar包有问题,导致maven编译的时候出错 解决方法:找到jar包所在的文件路径,在网上重新下载个相同版本的jar包,问题解决

  2. Spark Standalone与Spark on YARN的几种提交方式

    不多说,直接上干货! Spark Standalone的几种提交方式 别忘了先启动spark集群!!! spark-shell用于调试,spark-submit用于生产. 1.spark-shell ...

  3. JVM Specification 9th Edition (4) Chapter 4. The class File Format

    Chapter 4. The class File Format Table of Contents 4.1. The ClassFile Structure 4.2. Names 4.2.1. Bi ...

  4. gcc 遇到过的语法问题

    1.在ubuntu 12.04 环境下,在/etc/ld.so.conf.d/目录里添加某个so库的配置路径,比如 /home/myself/abc/lib/ 执行 sudo ldconfig

  5. mfc小工具开发之定时闹钟之---二十四小时时区和时间段

    1.凌晨0:00-6:00时显示凌晨,上午6:00-12:00显示上午,中午12:00-14:00显示中午,下午14:00-显示下午,晚上18:00-24:00显示晚上 2. 早上:6-8:上午8-1 ...

  6. iOS conformsToProtocol

    - (BOOL)conformsToProtocol:(Protocol *)aProtocol; 是用来检查对象(包括其祖先)是否实现了指定协议类的方法. 今天遇到一个问题,一个类没有实现proto ...

  7. poj 3084(最小割)

    题目链接:http://poj.org/problem?id=3084 思路:题目的意思是不让入侵者进入保护的房间,至少需要锁几道门.网络流建模:设一个超级源点,源点与有入侵者的房间相连,边容量为in ...

  8. Telnet发送邮件之聊以自慰

    北京的冬天,闲着无聊,得做点什么暖暖脑袋,用windows系统自带工具telnet玩了把邮件发送 准备工作: 1.打开windows系统telnet客户端功能 2.准备两个邮箱帐号(xxx@163.c ...

  9. RecyclerView上拉隐藏Toolbar,下拉显示

    RecyclerView下拉隐藏Toolbar,上拉显示效果图 先说个事:最近我准备做个开源的博客园android客户端!符合Google最新的material design设计风格的!不知道有没有小 ...

  10. spring boot打包会有.war.original文件的原因 (笔记)

    今天使用spring boot 2.1.1.RELEASE版本搭建项目,虽然可以直接打包成可运行的jar包,但是由于公司准备采用docker容器来管理项目,所以需要把jar包变成war包,并且war包 ...