Linux软件安装通用思路
在Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种:
1)一种是软件的源代码,您需要自己动手编译它。这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz)。
2)另一种是软件的可执行程序,你只要安装它就可以了。这种软件安装包通常被是一个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是.rpm。
当然,也有用rpm格式打包的源代码,用gzip压缩过的可执行程序包。只要您理解了以下的思路,这两种形式的安装包也不在话下了。
下面,我们就分成两个部分来说明软件安装思路:
第一部分:搞定.tar.gz
1.首先,使用tar -xzvf来解开这个包,如:
#tar -xzvf apache_1_3_6_tar.gz
这样就会在当前目录中创建了一个新目录(目录名与.tat.gz包的文件名类似),用来存放解压了的内容。如本例中就是apache_1.3.6
2.进入这个目录,再用ls命令查看一下所包含的文件,如:
#cd apache_1.3.6
#ls
你观察一下这个目录中包含了以下哪一个文件:configure、Makefile还是Imake。
1)如果是configure文件,就执行:
#./configure
#make
#make install
2)如果是Makefile文件,就执行:
#make
#make install
3)如果是Imake文件,就执行:
#xmkmf
#make
#make install
3.如果没有出现什么错误提示的话,就搞定了。至于软件安装到什么地方,通常会在安装时出现。否则就只能查阅一下README,或者问问我,:-)
如果遇到错误提示,也别急,通常是十分简单的问题:
1)没有安装C或C++编译器;
确诊方法:执行命令gcc(C++则为g++),提示找不到这个命令。
解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:
#rpm -ivh gcc* (哈哈,我们用到了第二种安装方式)
2)没有安装make工具;
确诊方法:执行命令make,提示找不到这个命令。
解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:
#rpm -ivh make*
3)没有安装autoconf工具;
确诊方法:执行命令autoconf,提示找不到这个命令。
解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:
#rpm -ivh autoconf*
4)缺少某些链接库;
确诊方法:在make时,提示需要某些文件。
解决方法:安装包含这个文件的包,这就需要积累了。
第二部分:搞定.rpm
RPM是Red Hat公司随Redhat Linux推出了一个软
件包管理器,通过它能够更加轻松容易地实现软件的安装。
1.安装软件:执行rpm -ivh rpm包名,如:
#rpm -ivh apache-1.3.6.i386.rpm
2.升级软件:执行rpm -Uvh rpm包名。
3.反安装:执行rpm -e rpm包名。
4.查询软件包的详细信息:执行rpm -qpi rpm包名
5.查询某个文件是属于那个rpm包的:执行rpm -qf rpm包名
6.查该软件包会向系统里面写入哪些文件:执行 rpm -qpl rpm包名
[遗留问题:redhat linux系统上有Redhat Linux Packet Manager,就是Redhat的包管理器,所以如果原来机器没装gcc编译器,装二进制码格式的编译器时,就可以直接下载相适应的rpm包来搞定。可是其它变种的linux系统怎么办呢? 有相应格式的二进制编译器软件还是说也可以使用redhat的rpm?]
---ANSWER:其他的发行版也有相应的包管理器,比如debian的包管理器叫dpkg,gentoo的好像可以merge等等。
下面,先再来一篇关于安装可执行程序的文章,说明一下,我用的机器装的是redhat9.0 strike版,所以我就在学校的ftp上下载了相应版本的is0光盘影响文件(3张盘),用虚拟光驱虚拟出三张盘来,便于后面找依赖的rpm格式的其它包的便利。基本上,我装的过程和他的一样,只是不它还多装了个binutils.
--------------------------begin
在quick linux中安装gcc的详细步骤
[ 作者:masenger 转贴自:来源不明 点击数:493 文章录入:admin ]
在quick linux中安装gcc的详细步骤
--- masenger .2004-2005
需要的东东有 :
glibc-devel-2.3.2-11.9.i386.rpm
glibc-kernheaders-2.4-8.10.i386.rpm
gcc-3.2.2-5.i386.rpm
cpp-3.2.2-5.i386.rpm
首先安装gcc ,这是因为以后要用到gcc 编译gcc包 gcc-4.1.0
1.首先要下载到软件包复制到相关目录
我用的包是包是gcc-3.4.6.9.i386.rpm 这个包一般是在安装盘的RPMS目录下
可以用命令find gcc* 找到
输入命令rpm -i gcc-3.4.6-9.i386.rpm
一般会出现一下提示
error: Failed dependencies:
cpp = 3.2.3-34 is needed by gcc-3.2.3-34
glibc-devel >= 2.2.90-12 is needed by gcc-3.2.3-34
libgcc >= 3.2.3-34 is needed by gcc-3.4.6-9
Suggested resolutions:
glibc-devel-2.3.2-95.3.i386.rpm
这就是说在安装rpm -i gcc-3.4.6-9.i386.rpm时还得需要glibc-devel-2.3.2-95.3.i386.rpm
2 输入命令rpm -i gcc-3.4.6-9.i386.rpm glibc-devel-2.3.2-95.3.i386.rpm
还会出现缺少包的信息,提示缺少什么包就安装什么包
3 最后输入以下才能成功安装
rpm -Uvh gcc-3.4.6-9.i386.rpm glibc-devel-2.3.2-95.20.i386.rpm libgcc-3.2.3-34.i386.rpm cpp-3.2.3-34.i386.rpm glibc-headers-2.3.2-95.20.i386.rpm glibc-kernheaders-2.4-8.34.i386.rpm
4.安装后输入命令gcc,则有如下返回
gcc: no input fil
es
说明gcc安装成功
到此为止,gcc就装好了
---------------end
没试过装源代码形式的就是不爽,所以按就一气呵成,再try一下装源代码格式的gcc编译器。我下载了3.4.1版本的gcc(gcc-3.4.1.tar.gz)。基本上按照下面这篇文章搞定的,虽然gnu网站上以及gcc解压后文件目录里面的INSTALL目录里面的介绍很全,但是仍觉得洋码不如咱中文看得舒服,哈哈, 。
-----------------begin
2004年4月20日最新版本的GCC编译器3.4.0发布了。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。GCC 3.4.0比以前版本更好地支持了C++标准。本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程。
安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其它Linux和Unix系统。
系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要做一些设置工作才能使编译器工作正常。在本文中我采用这个方案安装GCC 3.4.0,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。
按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装上一个可工作的新版本的GCC编译器。
1. 下载
在GCC网站上(http://gcc.gnu.org/)或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 4.1.0。可供下载的文件一般有两种形式:gcc-4.1.0.tar.gz和gcc-4.1.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。
2. 解压缩
根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):
% tar xzvf gcc-4.1.0.tar.gz
或者
% bzcat gcc-4.1.0.tar.bz2 | tar xvf -
新生成的gcc-4.1.0这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。
在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏
览器打开index.html阅读。
3. 建立目标目录
目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。
例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录):
% mkdir gcc-build
% cd gcc-build
以下的操作主要是在目标目录 ${objdir} 下进行。
4. 配置
配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。
配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):
% ${srcdir}/configure --prefix=${destdir} [其它选项]
例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则${destdir}就表示这个路径。
在我的机器上,我是这样配置的:
% ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java
将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。
Step 5:
此步是满足Step 4中的依赖关系。若Step 4顺利,configure成功执行并生成Makefile,此步骤便可略过。但是在我编译的过程缺少gmp和mpfr。gcc4.5需要gmp,mpfr,mpc
4.5以前的版本需要gmp,mpfr
由于我编译过程中缺少gmp和mpfr依赖,于是我便作了如下操作:
一、安装gmp(传统过程)
下载到gmp软件包,
gmp-4.2.1.tar.bz2
然后执行:
$ tar xjvf ./ gmp-4.2.1.tar.bz2
$ cd ./ gmp-4.3.0
$ ./configure --prefix=/usr/local/gmp
$ make
$ make check
# make install
$ make distclean
二、安装mpfr(依然是传统过程)
依然下载到mpfr软件包pfr-2.4.0.tar.bz2,下载地址http://ftp.twaren.net/Unix/GNU/gnu/mpfr/
然后执行:
$ tar xjvf ./mpfr-2.4.0.tar.bz2
$ cd ./ mpfr-2.4.1
$ ./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp
$ make
$ make check
# make install
$ make distclean
三、重新执行刚才没有成功的Step 4:
$ export LD_RUN_PATH=/usr/local/lib:/usr/local/mpfr/lib:/usr/local/gmp/lib
$ export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/mpfr/lib:/usr/local/gmp/lib
$ LD_RUN_PATH=/usr/local/lib:/usr/local/mpfr/lib:/usr/local/gmp/lib LD_LIBRARY_PATH=/usr/local/lib:/usr/local/mpfr/lib:/usr/local/gmp/lib
$ ../configure --prefix=/usr/gcc-4.4.0 --enable-languages=all --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --enable-libgomp
(若不想以后每次编译时都写
这么一大堆,可以参考我前一篇日志《Linux启动过程中几个重要配置文件的执行过程》将这些环境变量写在配置文件中)
成功执行后,生成Makefile。
在Make的时候还出现错误
../../gcc-4.1.1/gcc/java/jcf-io.c -o java/jcf-io.o
../../gcc-4.1.1/gcc/java/jcf-io.c:43:18: error: zlib.h: 没有这个文件或目录../../gcc-4.1.1/gcc/java/jcf-io.c: In function
make后的结果是
make[2]:***[java/jcf-io.o] 错误1
make[2]:leaving directory /usr/local/src/u/gcc
make[1]: *** [all-gcc] 错误2
make[1]:leaving directory /usr/local/src/u
make :***[all] 错误2
发现时没有安装zlib-deve-1.2.1.2-1.2.i386.rpm, 这个包也是在RPMS目录下
于是执行
#rpm -ivh zlib-deve-1.2.1.2-1.2.i386.rpm
安装后在进行4步Make
在make的过程中出现一个问题就解决一个问题。
Step 6:
编译完成后,我们只用安装了:
#make install
Step 7:
清理工作:
$rm -rf *
这 就是我编译gcc-4.1.0的全过程,途中遇到好几个问题,但解决的过程太杂,反正都是一阵google,步骤都体现在了Step 4及Step 6中,为了使整个过程清晰,我便没有写出来了,因为过于specific无用。总之,遇到问题不用急,充分利用google和各大Linux论坛,问题总 会解决的。下面给一个链接,是我当时编译时,两个问题的答案都从此文得到:
Unix Linux Forums:http://fixunix.com/solaris/490396-gcc-build-fails-cannot-compute-suffix-object-files.html
编译好了之后,那么我们系统中至少将会有两个版本的GCC:一个是我们现在编译好的,还有一个是刚才用到的以前版本的GCC,那么我们如何方便地从这几个版本进行切换呢?
一种粗劣的方法是手动用ln -s创建symbolic来管理,但这样费时费力,而且容易导致toolchain混乱。
幸好有update-alternatives实用软件!它可以方便管理好同一软件的各个不同版本。
1.一般情况下,编译程序路径都是使用
/usr/bin/gcc
其实这个/usr/bin/gcc只是个符号链接,它指向了/etc/alternatives/gcc,而/etc/alternatives/gcc是指向了/usr/bin/gcc-4.3,可以用ls命令查看
z@GODSON:~$ ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 21 2009-04-28 13:35 /usr/bin/gcc -> /etc/alternatives/gcc
z@GODSON:~$ ls -l /etc/alternatives/gcc
lrwxrwxrwx 1 root root 16 2009-04-28 13:40 /etc/alternatives/gcc -> /usr/bin/gcc-4.3
2.现在我们使用update-alternatives管理我们的GCC版本:
z@GODSON:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/gcc-4.4.0/bin/gcc 50
z@GODSON:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 40
z@GODSON:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 30
这样,我们就已经把我们安装的三个GCC版本向update-alternatives注册了,接下来我
们便可以方便地管理各版本切换。
3.切换版本
切换版本到gcc-4.1.0:
z@GODSON:~$ sudo update-alternatives --config gcc
[sudo] password for z:
现有 3 个可选项,它们都提供了“gcc”<下载本文