CentOS上源码安装Clang 3.8

之前想在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不再报错。

相关推荐