当前位置:   article > 正文

GCC编译器——GCC编译器安装教程

gcc编译器

以下内容源于网络资源的整理,如有侵权请告知删除。

参考博客

Linux系统中安装软件的三种方法_馨若梦的博客-CSDN博客_linux怎么安装软件

Linux下源码编译安装详解_Zebul博的博客-CSDN博客_编译安装

Linux源码包的一般安装步骤_Kaiattrib的博客-CSDN博客_linux源码包安装步骤

Linux环境下多版本编译器(gcc)共存_King_Mumumu的博客-CSDN博客

LD_LIBRARY_PATH用法详解_飞翔的鲲的博客-CSDN博客

前言 

以源码方式安装软件,需要对源码进行编译,因此要求当前系统中存在一个可用的编译器。Linux发行版一般都安装了GCC编译器,但版本一般较低。因此博文将以安装指定版本GCC编译器为例,说明使用源码安装软件的方法,其他软件源码包安装方法大同小异。

使用源码安装软件的三个步骤:配置(configure)、编译(make)与安装(make install),如下图所示。(其中configure、Makefile.in一般由项目管理器自动生成的,GCC编译器需要安装。)

1、获取与解压源码安装包

当前GCC版本信息可以通过gcc --version获知,从中看出这是gcc 4.8.4版本。

  1. xjh@ubuntu:~/Downloads$ gcc --version
  2. gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
  3. ####省略部分输出
  4. xjh@ubuntu:~/Downloads$

可以前往GCC官网下载指定版本的GCC源码安装包,这里下载gcc-10.1.0.tar.gz。

用firefox浏览器下载文件,默认保存到“/home/普通用户名/Downloads”目录中,或者root用户的“/root/Downloads”目录。

可以使用md5sum校验工具,进行源码包的完整性校验,防止源码包被别人串改。校验方法:计算MD5校验和,并与官方提供的值相比较,如果一致则表明没有篡改,如果不一致则表明被篡改了。

  1. xjh@ubuntu:~/Downloads$ pwd
  2. /home/xjh/Downloads
  3. xjh@ubuntu:~/Downloads$ ls
  4. gcc-10.1.0.tar.gz sublime_text_3_build_3211_x32.tar.bz2
  5. xjh@ubuntu:~/Downloads$ md5sum gcc-10.1.0.tar.gz
  6. 8a9fbd7e24d04c5d36e96bc894d3cd6b gcc-10.1.0.tar.gz
  7. xjh@ubuntu:~/Downloads$

我们将gcc-10.1.0.tar.gz解压至 /usr/local/src目录,得到文件夹gcc-10.1.0。

  1. xjh@ubuntu:~/Downloads$ sudo tar -zxvf gcc-10.1.0.tar.gz -C /usr/local/src
  2. ##忽略解压输出
  3. xjh@ubuntu:~/Downloads$ cd /usr/local/src/
  4. xjh@ubuntu:/usr/local/src$ ls
  5. gcc-10.1.0
  6. xjh@ubuntu:/usr/local/src$ cd gcc-10.1.0/
  7. xjh@ubuntu:/usr/local/src/gcc-10.1.0$ ls
  8. ABOUT-NLS contrib install-sh libgomp libvtv MD5SUMS
  9. ar-lib COPYING intl libhsail-rt ltgcc.m4 missing
  10. ChangeLog COPYING3 LAST_UPDATED libiberty ltmain.sh mkdep
  11. ChangeLog.jit COPYING3.LIB libada libitm lt~obsolete.m4 mkinstalldirs
  12. ChangeLog.tree-ssa COPYING.LIB libatomic libobjc lto-plugin move-if-change
  13. compile COPYING.RUNTIME libbacktrace liboffloadmic ltoptions.m4 multilib.am
  14. config depcomp libcc1 libphobos ltsugar.m4 NEWS
  15. config.guess fixincludes libcpp libquadmath ltversion.m4 README
  16. config-ml.in gcc libdecnumber libsanitizer MAINTAINERS symlink-tree
  17. config.rpath gnattools libffi libssp maintainer-scripts test-driver
  18. config.sub gotools libgcc libstdc++-v3 Makefile.def ylwrap
  19. configure include libgfortran libtool-ldflags Makefile.in zlib
  20. configure.ac INSTALL libgo libtool.m4 Makefile.tpl
  21. xjh@ubuntu:/usr/local/src/gcc-10.1.0$

2、配置 

软件包中一般会有安装教程,比如README文档。进入INSTALL目录下,发现有一个README文档,它提示我们可以打开当前目录下的index.html来查看安装教程。

在终端通过命令打开html文件的方法为“firefox xxx.html &”,此时会弹出安装教程的网页。

xjh@ubuntu:/usr/local/src/gcc-10.1.0/INSTALL$ firefox configure.html &

(1)安装路径的配置

通过执行"./configure -h"可以查看帮助。

由下图可知,--prefix选项用来配置安装的路径。如果没有通过该选项指定安装路径,则默认将可执行文件安装到/usr/local/bin,将库文件放到/usr/local/lib中。

建议使用--prefix选项,把文件安装到指定目录中,这样有利于查找、卸载软件或移植软件。当不再需要某个软件时,删除该安装目录就可以把软件卸载得干干净净,移植软件时只需要拷贝整个目录到另外一个机器即可。

这里设置安装路径为/usr/local/src/gcc-build-10.1.0。首先在/usr/local/src目录下创建gcc-build-10.1.0文件夹,接着通过./configure命令来设置软件的安装路径,如下所示:

  1. xjh@ubuntu:/usr/local/src$ ls
  2. gcc-10.1.0 gcc-build-10.1.0
  3. xjh@ubuntu:/usr/local/src$ cd gcc-10.1.0
  4. xjh@ubuntu:/usr/local/src/gcc-10.1.0$ ./configure --prefix=/usr/local/src/gcc-build-10.1.0/
  5. ##省略输出内容
  6. xjh@ubuntu:/usr/local/src/gcc-10.1.0$

(2)依赖包的配置

执行上述命令时,错误提示还没有安装GCC所需要的依赖包(如 gmp、mpfr、mpc 等)。

  1. checking for the correct version of gmp.h... no
  2. configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
  3. Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
  4. their locations.  Source code for these libraries can be found at
  5. their respective hosting sites as well as at
  6. https://gcc.gnu.org/pub/gcc/infrastructure/.  See also
  7. http://gcc.gnu.org/install/prerequisites.html for additional info.  If
  8. you obtained GMP, MPFR and/or MPC from a vendor distribution package,
  9. make sure that you have installed both the libraries and the header
  10. files.  They may be located in separate packages.

因此使用以下指令进行GCC所需要的依赖包的安装。

  1. xjh@ubuntu:/usr/local/src/gcc-10.1.0$ sudo ./contrib/download_prerequisites
  2. 2023-03-10 16:28:23 URL:http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840/2383840] -> "./gmp-6.1.0.tar.bz2" [1]
  3. 2023-03-10 16:28:30 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284/1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
  4. 2023-03-10 16:28:34 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "./mpc-1.0.3.tar.gz" [1]
  5. 2023-03-10 16:30:19 URL:http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291/1658291] -> "./isl-0.18.tar.bz2" [1]
  6. gmp-6.1.0.tar.bz2: OK
  7. mpfr-3.1.4.tar.bz2: OK
  8. mpc-1.0.3.tar.gz: OK
  9. isl-0.18.tar.bz2: OK
  10. All prerequisites downloaded successfully.
  11. xjh@ubuntu:/usr/local/src/gcc-10.1.0$

然后再次进行配置安装路径,此时没有错误提示。 

  1. xjh@ubuntu:/usr/local/src/gcc-10.1.0$ ./configure --prefix=/usr/local/src/gcc-build-10.1.0/
  2. ##省略输出内容
  3. configure: creating ./config.status
  4. config.status: creating Makefile
  5. xjh@ubuntu:/usr/local/src/gcc-10.1.0$

(3)支持语言的配置

GCC编译器支持多种编程语言的编译,但是我们只需要编译C与C++程序。

我们可以通过下面命令来配置GCC编译器,以支持C和C++的编译(注意前面的配置--prefix在这里也要添上去,否则默认将可执行文件安装到/usr/local/bin,将库文件放到/usr/local/lib中)。

  1. xjh@ubuntu:/usr/local/src/gcc-10.1.0$ sudo ./configure --prefix=/usr/local/src/gcc-build-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib
  2. ###省略部分输出
  3. checking whether to enable maintainer-specific portions of Makefiles... no
  4. configure: creating ./config.status
  5. config.status: creating Makefile
  6. xjh@ubuntu:/usr/local/src/gcc-10.1.0$

3、对源码进行编译

上面的配置会生成Makefile文件,接下来我们可以使用 make 命令来编译 GCC 源程序。

xjh@ubuntu:/usr/local/src/gcc-10.1.0$ sudo make

编译的过程耗费时间很长,另外也出现错误提示:

configure: error: C++ preprocessor "/lib/cpp" fails sanity check  

这是因为缺少必要的C++库,可以通过以下命令安装这些库文件。

  1. apt-get install build-essential
  2. apt-get install g++

经过上面的修改与处理后,再次执行编译则会成功。

  1. xjh@ubuntu:/usr/local/src/gcc-10.1.0$ sudo make
  2. ##省略部分输出
  3. make[4]: Leaving directory `/usr/local/src/gcc-10.1.0/i686-pc-linux-gnu/libatomic'
  4. make[3]: Leaving directory `/usr/local/src/gcc-10.1.0/i686-pc-linux-gnu/libatomic'
  5. make[2]: Leaving directory `/usr/local/src/gcc-10.1.0/i686-pc-linux-gnu/libatomic'
  6. make[1]: Leaving directory `/usr/local/src/gcc-10.1.0'
  7. xjh@ubuntu:/usr/local/src/gcc-10.1.0$

4、安装GCC编译器

通过执行以下命令来安装经过编译后的GCC编译器,安装好成功后有如下提示。

  1. xjh@ubuntu:/usr/local/src/gcc-10.1.0$ sudo make install
  2. ####省略部分输出
  3. ----------------------------------------------------------------------
  4. Libraries have been installed in:
  5. /usr/local/lib
  6. If you ever happen to want to link against installed libraries
  7. in a given directory, LIBDIR, you must either use libtool, and
  8. specify the full pathname of the library, or use the `-LLIBDIR'
  9. flag during linking and do at least one of the following:
  10. - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
  11. during execution
  12. - add LIBDIR to the `LD_RUN_PATH' environment variable
  13. during linking
  14. - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
  15. - have your system administrator add LIBDIR to `/etc/ld.so.conf'
  16. See any operating system documentation about shared libraries for
  17. more information, such as the ld(1) and ld.so(8) manual pages.
  18. ----------------------------------------------------------------------
  19. make[4]: Nothing to be done for `install-data-am'.
  20. make[4]: Leaving directory `/usr/local/src/gcc-10.1.0/i686-pc-linux-gnu/libatomic'
  21. make[3]: Leaving directory `/usr/local/src/gcc-10.1.0/i686-pc-linux-gnu/libatomic'
  22. make[2]: Leaving directory `/usr/local/src/gcc-10.1.0/i686-pc-linux-gnu/libatomic'
  23. make[1]: Leaving directory `/usr/local/src/gcc-10.1.0'
  24. xjh@ubuntu:/usr/local/src/gcc-10.1.0$

5、多版本GCC的切换与共存 

旧版本的gcc命令位于/usr/bin目录下,它是一个链接符号,指向/usr/bin/gcc-4.8命令,如下所示。

  1. xjh@ubuntu:/usr/bin$ ls gcc -l
  2. lrwxrwxrwx 1 root root 7 六月 5 2022 gcc -> gcc-4.8
  3. xjh@ubuntu:/usr/bin$

新版本gcc安装完成后,在/usr/local/src/gcc-build-10.1.0/bin目录下也有一个gcc命令。

  1. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0$ ls
  2. bin include lib libexec share
  3. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0$ cd bin
  4. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$ ls
  5. c++ g++ gcc-ar gcc-ranlib gcov-dump i686-pc-linux-gnu-c++ i686-pc-linux-gnu-gcc i686-pc-linux-gnu-gcc-ar i686-pc-linux-gnu-gcc-ranlib
  6. cpp gcc gcc-nm gcov gcov-tool i686-pc-linux-gnu-g++ i686-pc-linux-gnu-gcc-10.1.0 i686-pc-linux-gnu-gcc-nm lto-dump
  7. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$

我们可以修改/usr/bin/gcc这个符号链接的指向,实现不同版本GCC编译器的切换。如果这个符号链接指向/usr/bin/gcc-4.8命令,则用的是旧版本的GCC编译器;如果指向/usr/local/src/gcc-build-10.1.0/bin/gcc命令,则使用的是新版本的GCC编译器。

  1. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$ gcc -v
  2. Using built-in specs.
  3. COLLECT_GCC=gcc
  4. COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.8/lto-wrapper
  5. Target: i686-linux-gnu
  6. Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04.4' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
  7. Thread model: posix
  8. gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
  9. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$ ls -l /usr/bin/gcc
  10. lrwxrwxrwx 1 root root 16 Mar 11 01:52 /usr/bin/gcc -> /usr/bin/gcc-4.8
  11. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$ sudo rm /usr/bin/gcc
  12. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$ sudo ln -s /usr/local/src/gcc-build-10.1.0/bin/gcc /usr/bin/gcc
  13. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$ ls -l /usr/bin/gcc
  14. lrwxrwxrwx 1 root root 39 Mar 11 01:55 /usr/bin/gcc -> /usr/local/src/gcc-build-10.1.0/bin/gcc
  15. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$ gcc -v
  16. 使用内建 specs。
  17. COLLECT_GCC=gcc
  18. COLLECT_LTO_WRAPPER=/usr/local/src/gcc-build-10.1.0/libexec/gcc/i686-pc-linux-gnu/10.1.0/lto-wrapper
  19. 目标:i686-pc-linux-gnu
  20. 配置为:./configure --prefix=/usr/local/src/gcc-build-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib
  21. 线程模型:posix
  22. Supported LTO compression algorithms: zlib
  23. gcc 版本 10.1.0 (GCC)
  24. xjh@ubuntu:/usr/local/src/gcc-build-10.1.0/bin$

/usr/local/src/gcc-build-10.1.0/目录下有bin目录、lib目录,分别是可执行文件、动静态链接库的存放目录。当我们想要不带路径地使用新版本gcc命令时,需要将bin目录里的内容拷贝到/usr/bin目录下,或者将bin目录路径导出到PATH这个变量中(上面的软链接方式只是为了实现切换)。当我们想要链接某些库函数时,需要通过-L指定lib目录的路径,-l选项指定某库,又或者将lib目录导出到LD_LIBRARY_PATH这个变量中。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/270305
推荐阅读
相关标签
  

闽ICP备14008679号