Linux 环境下安装 gcc 详细过程 以及安装 glibc
Posted shaderdx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 环境下安装 gcc 详细过程 以及安装 glibc相关的知识,希望对你有一定的参考价值。
1、了解一下 gcc
目前,GCC可以用来编译C / C++、FORTRAN、Java、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。
在安装之前,系统必须有 cc 或者 gcc 的编译器,如果没有,就不能安装更高版本的 gcc 了,如果是这种情况,可以在网上找一个与你系统相适应的如 RPM 等二进制形式的 GCC 软件包来安装使用。
如果,没有gcc或g++或make,再Ubuntu下可以安装低版本的,步骤如下:
首先:apt-get update 更新库;
apt-get install gcc;
apt-get install g++;
apt-get install make;
即可安装。
本文介绍的是以源代码安装 gcc 的过程,我安装的是在一个单独的目录下,以后想卸载的话,直接删除该目录就行。
2、需要下载的安装包
2.1 下载 gcc
下载网址是http://ftp.gnu.org/gnu/gcc/,可以根据自己的需要下载哪个版本。
2.2 下载3个依赖包
一个是GMP,一个是MPFR,一个是MPC,下载地址依次为:ftp://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.bz2 ,http://ftp.gnu.org/gnu/mpfr/mpfr-4.1.0.tar.gz, ftp://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz。
安装的顺序依次为:gmp,mpfr, mpc,最后安装gcc。我开始就直接安装gcc,在配置过程出现以下信息:
configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify their locations.
提示安装gcc之前,必须安装GMP 4.2以上版本,MPFR2.3.1以上版本, MPC 0.8.0以上版本。
3、安装步骤
3.1 安装 GMP
我这里选择的是GMP-6.2.1版本,解压gmp-6.2.1后,得到源代码目录,创建一个临时编译目录temp。
$ tar -jxvf gmp-6.2.1.tar.bz2
$ cd gmp-6.2.1
$ mkdir temp
$ cd temp
开始配置安装目录,进入temp目录后,输入以下命令:
$ ../configure --prefix=/usr/local/gmp-6.2.1
$ make
$ make install
这样gmp就安装完成了。安装mpfr和mpc过程也差不多,只是安装的时候得加入依赖项
3.2 安装 MPFR
我这里选择的是MPFR-4.1.0版本。解压mpfr-4.1.0后,建立临时编译目录temp,进入temp目录
$ tar -zxvf mpfr-4.1.0.tar.gz
$ cd mpfr-4.1.0
$ mkdir temp
$ cd temp
$ ../configure --prefix=/usr/local/mpfr-4.1.0 --with-gmp=/usr/local/gmp-6.2.1
$ make
$ make install
其中--with=/usr/local/gmp-6.2.1就是依赖项, /usr/local/gmp-6.2.1是gmp的安装目录
3.3 安装 MPC
我选择的是MPC-1.2.1版本. 解压后,建立临时编译目录temp,进入temp目录.
$ tar -zxvf mpc-1.2.1.tar.gz
$ cd mpc-1.2.1
$ mkdir temp
$ cd temp
$ ../configure --prefix=/usr/local/mpc-1.2.1 --with-gmp=/usr/local/gmp-6.2.1 --with-mpfr=/usr/local/mpfr-4.1.0
$ make
$ make install
记得后面两项的依赖项,也就是你的gmp和mpfr的安装目录
3.4 安装 gcc
前面安装的三个,都是为安装 gcc 做准备的。解压gcc-10.2.0的安装包
$ tar zxvf gcc-10.2.0.tar.gz 或者 $ tar jxvf gcc-10.2.0.tar.bz2
$ cd gcc-10.2.0
$ ./configure --prefix=/usr/local/gcc-10.2.0 --enable-multilib --enable-threads=posix --disable-checking --enable--long-long --enable-languages=c,c++,java --with-gmp=/usr/local/gmp-6.2.1 --with-mpfr=/usr/local/mpfr-4.1.0 --with-mpc=/usr/local/mpc-1.2.1
注意 --enable-multilib 这个选项, 选择支持32bit还是only 64bit. 否则会有一下提示:
configure: error: I suspect your system does not have 32-bit development libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.
记得加上后面三个依赖项,否则会出刚开始出现的错误的。
然后安装
$ make
$ make install
安装的时候等挺长时间,差不多两个小时。
【注意】
安装过程可能出现这样的错误提示:
错误提示1:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h:No such file or directory
解决办法:
在编译32位gcc时出现如上所示的错误,原因时没有安装32位glibc库导致的:
ubuntu: sudo apt-get install libc6-dev-i386
CentOS:yum -y install glibc-devel.i686
错误提示2:
/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory
解决办法:
其实主要是gcc安装环境没有安装完善。
可以尝试输入sudo apt-get install gcc-multilib即可.
其他错误:
如果还有其他,一般是不支持32位安装,可以取消。--enable-multilib改为--disable-multilib。
3.5 gcc、g++、gcj设置
要想使用GCC-7.5.0的gcc等命令,简单的方法就是把它的路径$destdir/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。
而原来gcc的路径是在usr/bin下。我们可以把旧版gcc-7.5.0中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接, 链接成其他命令, 新的gcc-10.2.0作为默认编译项:
$ cd /usr/bin
$ ln -s /usr/local/gcc-7.5.0/bin/gcc gcc750
$ ln -s /usr/local/gcc-7.5.0/bin/g++ g++750
$ ln -s /usr/local/gcc-7.5.0/bin/gcj gcj750
$ ln -s /usr/local/gcc-10.2.0/bin/gcc gcc
$ ln -s /usr/local/gcc-10.2.0/bin/g++ g++
$ ln -s /usr/local/gcc-10.2.0/bin/gcj gcj
这样,就可以分别使用gcc750、g++750、gcj750来调用旧版GCC-7.5.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。
同时,仍然能够使用新版本的GCC-10.2.0编译器中的gcc、g++等命令。
3.6 库路径的设置
将$destdir/lib路径添加到环境变量LD_LIBRARY_PATH中,例如,如果GCC-10.2.0安装在/usr/local/gcc-10.2.0目录下,在RH Linux下可以直接在命令行上执行
$ export LD_LIBRARY_PATH=/usr/local/gcc-10.2.0/lib
最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了,在文件$HOME/.bash_profile中添加下面两句:
LD_LIBRARY_PATH=:/usr/local/gmp-6.2.1/lib:/usr/local/mpfr-4.1.0/lib:/usr/local/mpc-1.2.1/lib:/usr/local/gcc-10.2.0/lib64
export LD_LIBRARY_PATH
或者在/etc/bash_profile 下添加。
重启系统设置生效,或者执行命令
$ source $HOME/.bash_profile
或者:
$ source /etc/bash_profile
用新的编译命令(gcc、g++等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。
完成了Linux安装GCC,之后你就能轻松地编辑编译了。
4 安装gcc方法二
4.1安装依赖库
gcc依赖了mpfr、gmp、mpc 和is这四个库,现在在gcc的文件中整合了一个shell脚本,我们通过执行脚本文件快速安装依赖。注意:该脚本需要在gcc文件夹内执行。
[root@localcomputor gcc-10.2.0]# ./contrib/download_prerequisites
4.2 配置
进入gcc目录内,执行配置命令。
4.2.1建立编译输出文件。
$ ./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
4.2.2配置命令如下
$ ./configure --prefix=/usr/local/gcc-10.2.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
如果不是在所期望安装的目录中还需要加上--prefix=/usr/local/gcc-10.2.0 后面改成你自己的目录。
对上述命令进行说明一下:
- –enable-languages=c,c++:只需要支持c/c++编译器即可。
- –disable-multilib:指不需要支持多平台的gcc,如果是64位就仅安装64位的gcc。也可以选择支持。选择支持的话,你要先安装32位的开发库,命令如下:
sudo yum install libgcc.i686
sudo yum install glibc-devel.i686
4.2.3编译
# make -j2
-j的功能如下:
-j [jobs], --jobs[=jobs]
Specifies the number of jobs (commands) to run simultaneously. If there is more than one -j option, the last one
is effective. If the -j option is given without an argument, make will not limit the number of jobs that can run
simultaneously.
简单来说就是制定同时运行的作业数,相当于多线程。后面的数字自己根据机器的配置定义。不要太高,可能会出现内存溢出的情况。
别问我怎么知道的。。。make clean
清除之前失败编译的结果。重新编译。编译需要很长时间,运行数越高,时间越短。
# make install
编译安装成功后
$ gcc -v
测试gcc版本。
到这里安装gcc结束。
5 安装 glibc
下载glibc库. 地址 Index of /gnu/glibcglibc-2.32.tar.gz
$ tar zxvf glibc-2.32.tar.gz
$ cd glibc-2.32
$ mkdir temp
$ cd temp
$ ../configure --prefix=/usr/local/glibc-2.32 --with-headers=/usr/include
$ make -j4
$ make install
安装的时候等挺长时间。
看看现在libc.so.6在哪个位置,然后修改软链接
ln -s /usr/local/glibc-2.32/lib/libc-2.32.so /lib64/libc.so.6
添加配置路径:
$ vim /etc/profile //或 ~/.bash_profile
//在文件里加入这一行,保存退出
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/usr/local/glibc-2.32/lib
$ source /etc/profile //或 ~/.bash_profile
或者退出重启链接.
完成安装.
以上是关于Linux 环境下安装 gcc 详细过程 以及安装 glibc的主要内容,如果未能解决你的问题,请参考以下文章