编译软件的过程
编译软件的过程与经验:
1,./configure
通过指定参数,来确认你想要安装的软件安装在哪里,加上哪些功能和去掉哪些功能(如果这一步报错,基本都是缺少依赖包;
解决方法:使用yum去安装,一般来说,rhel做为一个成熟的linux操作系统,常见的底层依赖包都自带了,所以去安装下面这两个组,一般都会有你所需要的依赖包。
# yum groupinstall "Development tools" -y
# yum groupinstall "Desktop Platform Development" -y
如果缺少依赖包在rhel的yum源里找不到,则上网下载第三方的软件,先编译第三方软件,再编译本软件
2,make
相当于是把你上一步定义好的,把这个软件给做出来(这一步一般很少出错,如果出错,问题都比较麻烦。可能是一些兼容性的问题等等,你可以尝试上网查询解决方法,如果查不到,只能换个环境或者换个软件版本或者换些编译参数重新编译)
3, make install
把做好的软件,安装到你第一步所指定的安装目录里(这一步几乎不会出错的)
-----------------------------------------------------------------------------------------------------------------------
讨论1:
关于./configure参数选择的基本方法:
./configure --help 查看所有的编译参数
第一个重要参数
--prefix= 此参数指定安装目录(一般安装到/usr/local/或者/usr/local/软件名下)
第二类重要参数:
--enable-xxx 打开一个功能(默认是关闭的)
--disable-xxx 关闭一个功能(默认是打开的)
如果你是新手,你就不加任何功能参数,全部使用默认值。但又如果你怕少了功能造成以后需要重编,你可以加上所有的enable参数(但加得越多,错误概率也越大,因为调用的依赖会多,有可能会因为少包而报错)
第三类参数:
--with-xxx=DIR 指定一个目录,调用此目录的功能
讨论2:
假设一个软件abc,安装到/usr/local和安装到/usr/local/abc之间的区别?
安装到/usr/local下:
优点:此软件的命令一般会安装到/usr/local/bin或/usr/local/sbin等;这些路径都默认在$PATH里,所以安装的命令可以直接用,而不用使用绝对路径。
库文件一般都会安装到/usr/local/lib下,所以把它加入ldconfig,以后所有安装在此目录的库文件都可以被找到。
缺点:不方便删除,因为很多软件都安装到/usr/local下
安装到/usr/local/abc下:
优缺点与上面正好相反
最终建议:小软件一般默认安装/usr/local/;大软件安装/usr/local/软件名/下
讨论3:
关于ldconfig,一个软件的库文件是有可能被其它软件所调用,那么其它软件能否找到你的库文件呢?
一般来说,库文件安装到/lib,/lib64,/usr/lib/,/usr/lib64等,都可以被找得到.那么如果一个软件abc把库文件安装到/usr/local/abc/lib,别人想要找到,你就要把这个路径入到ldconfig可以找到的路径列表里面去。
做法为:
# vim /etc/ld.so.conf ----在这个主配置文件里加上一行,写上让别人要查找库文件的路径
include ld.so.conf.d/*.conf ----或者在这里的任意.conf结尾的子配置文件里加上一行也可以
/usr/local/abc/lib
# ldconfig ----上面加入路径后,就使用此命令让其生效