以下内容源于网络资源的整理,如有侵权请告知删除。
Linux系统中安装软件的三种方法_馨若梦的博客-CSDN博客_linux怎么安装软件
Linux下源码编译安装详解_Zebul博的博客-CSDN博客_编译安装
Linux源码包的一般安装步骤_Kaiattrib的博客-CSDN博客_linux源码包安装步骤
以源码方式安装软件,需要对源码进行编译,因此要求当前系统中存在一个可用的编译器。Linux发行版一般都安装了GCC编译器,但版本一般较低,因此博文将以安装指定版本GCC编译器为例,说明使用源码安装软件的方法,其他软件源码包安装方法大同小异。
使用源码安装软件的三个步骤:配置(configure)、编译(make)与安装(make install),如下图所示。(其中configure、Makefile.in一般由项目管理器自动生成的,GCC编译器需要安装。)
1、获取源码安装包
首先前往GCC官网下载指定版本的GCC源码安装包:gcc-10.1.0.tar.gz。
用firefox浏览器下载文件,默认保存到普通用户的“/home/普通用户名/Downloads”目录,或者root用户的“/root/Downloads”目录。
可以使用md5sum校验工具,进行源码包的完整性校验,防止源码包被别人串改。校验方法:计算MD5校验和,并与官方提供的值相比较,如果一致则表明没有篡改,如果不一致则表明被篡改了。
2、解压缩
root@ubuntu:/home/xjh/Downloads# tar -zxvf gcc-10.1.0.tar.gz -C /usr/local/src
把tar包解压到 /usr/local/src目录,得到文件夹gcc-10.1.0,其文件组成如上图。
- 对于tar包,要用tar命令来解压;如果是其它压缩方式,则需要用其它命令。
- -C,此参数用来指定解压到哪个目录。如果不使用-C /usr/local/src,则会解压到当前目录下;
- 选项zxvf的含义如下。
- z:gz压缩格式;如果是bz2压缩格式,选项改用 j ;
- x:解压文件
- v:详细地列出处理的文件
- f:指定文件名
3、配置
(1)阅读安装教程
进入INSTALL目录下,发现还有一个README文档,该文档提示我们可以打开当前目录下的index.html来查看安装教程。
在终端通过命令打开html文件的方法为“firefox html文件名 &”,此时会弹出安装教程网页。
xjh@ubuntu:/usr/local/src/gcc-10.1.0/INSTALL$ firefox index.html &
(2)按照教程配置安装参数
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命令来设置软件的安装路径。
root@ubuntu:/usr/local/src# ls
gcc-10.1.0
root@ubuntu:/usr/local/src# mkdir gcc-build-10.1.0
root@ubuntu:/usr/local/src# ls
gcc-10.1.0 gcc-build-10.1.0
root@ubuntu:/usr/local/src# cd gcc-10.1.0/
root@ubuntu:/usr/local/src/gcc-10.1.0# ./configure --prefix=/usr/local/src/gcc-build-10.1.0/
2)依赖包的配置
执行上述命令时提示还没有安装GCC所需要的依赖包(如 gmp、mpfr、mpc 等)。
checking for the correct version of gmp.h... no
configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
their locations. Source code for these libraries can be found at
their respective hosting sites as well as at
https://gcc.gnu.org/pub/gcc/infrastructure/. See also
http://gcc.gnu.org/install/prerequisites.html for additional info. If
you obtained GMP, MPFR and/or MPC from a vendor distribution package,
make sure that you have installed both the libraries and the header
files. They may be located in separate packages.
于是使用以下指令进行GCC所需要的依赖包的安装。
root@ubuntu:/usr/local/src/gcc-10.1.0# ./contrib/download_prerequisites
然后再次设置安装路径,没有错误提示。
root@ubuntu:/usr/local/src/gcc-10.1.0# ./configure --prefix=/usr/local/src/gcc-build-10.1.0/
3)其他配置
GCC 编译器支持多种编程语言的编译,考虑到实际情况中我们只需要编译 1~2 种编程语言,因此需要对其进行必要的配置。通过执行如下指令,可以配置 GCC 支持编译 C 和 C++ 语言。
root@ubuntu:/usr/local/src/gcc-10.1.0# ./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
4、对源码进行编译
步骤3的配置生成Makefile文件后,接下来就可以使用 make 命令来编译 GCC 源程序,即把源代码文件变为二进制的可执行程序。编译的过程挺耗费时间的。
root@ubuntu:/usr/local/src/gcc-10.1.0# make
出错提示如下。
configure: error: in `/usr/local/src/gcc-10.1.0/host-i686-pc-linux-gnu/gcc':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
checking for i686-pc-linux-gnu-gnatbind... no
checking for i686-pc-linux-gnu-gnatmake... no
checking whether compiler driver understands Ada... no
checking how to run the C++ preprocessor... /lib/cpp
configure: error: in `/usr/local/src/gcc-10.1.0/host-i686-pc-linux-gnu/gcc':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details
make[2]: *** [configure-stage1-gcc] Error 1
make[2]: Leaving directory `/usr/local/src/gcc-10.1.0'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/usr/local/src/gcc-10.1.0'
make: *** [all] Error 2
root@ubuntu:/usr/local/src/gcc-10.1.0#
第二个错误出现的原因是缺少必要的C++库,解决的方法依次输入以下命令:
apt-get install build-essential
apt-get install g++
第一个错误应该是没有遵循官方指定的GCC编译器安装方式导致的。不应该在/usr/local/src/gcc-10.1.0目录下进行配置以及执行make指令,根据安装说明文档,应该在/usr/local/src/gcc-build-10.1.0目录进行配置以及执行make指令,即应该输入以下指令:
root@ubuntu:/usr/local/src/gcc-build-10.1.0# ../gcc-10.1.0/configure --prefix=/usr/local/src/gcc-build-10.1.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
root@ubuntu:/usr/local/src/gcc-build-10.1.0# make
经过如上处理后,编译成功,如下图所示:
5、安装GCC
执行如下命令安装GCC。
root@ubuntu:/usr/local/src/gcc-build-10.1.0# make install
安装好10.1.0 版本的 GCC 编译器后,有如下提示。
我猜想这是系统内存在两个版本的GCC的缘故。关于linux下存在多个GCC版本的问题,比如新版本替换旧版本,或者两种版本共存并根据实际需要选择其中一种,可以搜索相关内容。
(2)关于新版本替换旧版本。我原来的想法是重新配置(使用默认路径)然后编译与安装,这样安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,这应该会覆盖原来GCC版本的内容。但实际上原来版本的GCC,其可执行命令gcc存放在/usr/bin目录下,而且它是一个软连接,指向/usr/bin目录下的gcc-4.8,按照我原来的想法来做并不会覆盖原GCC版本的内容。那么我可以修改/usr/bin/gcc的指向,使其指向/usr/local/src/gcc-build-10.1.0/bin下面的gcc指令,则GCC的版本就会切换到了10.1.0版本了。如果要改回原来的版本,可以修改/usr/bin/gcc的指向,使其指向/usr/bin目录下的gcc-4.8。参考博客:在Linux下安装多个版本的gcc_CHID的博客-CSDN博客_linux安装多版本gcc。
(2)关于两种版本共存并根据实际需要选择其中一种,参考博客:Linux环境下多版本编译器(gcc)共存_King_Mumumu的博客-CSDN博客_多版本gcc。
另外还要执行如下操作?LD_LIBRARY_PATH用法详解_飞翔的鲲的博客-CSDN博客_android ld_library_path
LD_LIBRARY_PATH=/usr/local/gcc-build-10.1.0/lib/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH