开放源码软件的安装(tar包安装方法)

                                开放源码软件的安装
1.基本概念
    开放源码:就是程序代码,写给人类看的程序语言,但机器并不认识,所以无法执行
    编译程序:将程序代码转换成机器能够看懂的语言,类似翻译者的角色
    可执行程序:经过编译程序变成二进制程序后机器看的懂所以可以执行的文件。
    函数库:类似子程序的角色,可以被调用来执行的一段的一段功能函数。
  
    一个软件是否可以安装,即是否可以成为可执行程序,必须对安装环境进行检测,检测程序(configure或者config等文件)
检测的内容包含以下数据:
      1)是否有适合的编译程序可以编译本软件的程序代码;
      2)是否存在本软件所需要的函数库或者其他需要的相关软件;
      3)操作系统平台是否适合软件,包括linux的内核版本;
      4)内核的头定义文件(header include)是否存在(驱动程序必须要的检测)。
  
  
  Tarball:就是一个经过Tar打包和gzip或者bzip2打包压缩后的.tar.gz或者.tar.bz2的软件包。里面主要包含三部分内容:
      1)源代码文件                    2)检测程序文件(可能是configure或者config等文件名)
      3)本软件的简,易说明和安装说明(INSTALL或README),很重要,参考他们可实现tarball的安装。
      
2.安装和升级

    安装升级的方式大概有二种:
       1)直接将软件源代码通过编译来安装与升级。
       2)直接以编译好的二进制程序安装升级,厂商针对自己的平台事先编译出自己平台的二进制程序。在相同的平台只需要安装
就可以,省略检测和编译的过程。例如Redhat系统(fedora、centOS等)开发的RPM软件管理机制和YUM在线跟新模式。

    tarball的安装流程:
       1)将tarball由厂商的网页下载下来;
       2)将tarball解压缩,生成许多的源文件;
       3)开始gcc进行源码的编译(会生成可执行文件)
       4)然后以gcc进行函数库,主程序,子程序的链接,以形成主要的二进制文件;
       5)将上述的二进制文件以及相关的配置文件安装到自己的主机上面。
上面的3.4步骤可以通过make(写makefile)这个命令的功能来简化它。

3.gcc的简易用法
       1)将编译的源码制作成目标文件,但不制作链接等功能;
             gcc -c hello.c  会生成hello.o文件,并不会生成可执行文件
       2)在编译的时候,依据环境优化执行速度
             gcc -O hello.c -c 会生成hello.o文件,并且进行了优化。
       3)在进行二进制文件的制作时,将链接的函数库与相关的路径填入(这些路径不在默认的位置时需要)         
             gcc sin.c -lm -L/usr/lib -I/usr/include
        * -lm 指的是libm.so或者libm.a这个函数库
        * -L后面接的路径是刚才上面那个函数库的搜索目录
        * -I后面接的是源码内的includ文件的所在位置

4.make的优点
      1)通过makefile文件简化编译时所需要执行的命令。
      2)若在编译完成以后,修改了某个源代码,则make仅会对被修改了的文件进行编译,其他的目标文件不会被修改。
      3)最后可以依照相依性来更新执行文件。

5.makefile的基本语法和变量
     目标(target):目标文件1 目标文件2
     <Tab> gcc -o 欲新建的可执行文件 目标文件1 目标文件2
     
     eg :
     vim makefile
     main:main.o haha.o sin_value.o cos_value.o
        gcc -o main main.o haha.o sin_value.o cos_value.o -lm
     clean:
        rm -f main.o haha.o sin_value.o cos_value.o
    *命令行必须以Tab键开头
    *目标于目标文件之间以”:"隔开
    以上makefile制作了二个执行操作,执行main 输入 make main即可,执行clean 输入make clean即可,如果想要清除在编译
则使用 make clean main就可以了
    
    变量可以像shell script一样 上面的makefile可以改写成
    vim makefile
    LIBS = -lm
    OBJS = main.o haha.o sin_value.o cos_value.o
    main: $(OBJS)
        gcc -o main $(OBJS) $(LIBS)
     clean:
        rm -f $(OBJS)
    *变量于变量内容以 = 隔开,二边可以有空格
    *变量左边不可以有Tab
    *变量最好以大写字母,注意使用$符号对变量应用。
    
 6.tarball安装基本步骤
    1)获得源文件,将Tarball文件放在/usr/local/src目录下解压缩
    2)获得步骤流程,查阅解压缩文件中的INSTALL和README
    3)相关属性软件安装,根据INSTALL和README的内容查看并安装好一些相关的软件(非必要)
    4)建立makefile:以自检测程序(configure或者config)检测操作环境,并建立makefile文件
    5)编译:以make这个程序并使用目录下的makefile作为他的参数配置文件,来进行make(编译,清除等)的操作。
    6)安装:以make这个程序,并以makefile这个配置文件,依据install这个目标(targe)来制定正确的安装路径.

7.tarball软件安装的命令执行方式
    1)./configure 这个步骤是为了建立makefile的,主要通过Script来检测linux系统的相关属性
    2)make clean make读取makefile中的clean目标。建议编译前都执行此步骤,防止上次编译目标文件的残余
    3)make make将会按照makefile中的默认工作进行编译,编译的工作主要是进行gcc将源代码编译成可被执行的目标代码 ,
但是这些目标代码还需要一些库函数之类的连接后,才能成为一个完整的可执行文件。
    4)make install  make会执行makefile中的install操作,将上一步编译的数据安装在默认的目录,完成安装
    *以上只要有一步骤不成功,安装就不会成功。

8.tarball软件安装的建议
    1)最好将tarball的原始数据解压缩到/usr/local/src当中;
    2)安装时,最好安装到/usr/local这个默认路劲中
    3) 考虑到将来反安装的步骤,最好将每个软件单独安装在/usr/local下面
    4)为安装的单独目录的软件man page加入man path搜索
    *如果你安装的软件放在/usr/local/software/中,那么在man page搜素的设置中就要在/etc/man.config内的40-50行左右加入
       MANPATH/usr/local/software/man   这样才能通过man来查询软件的在线帮助文档。
    
9.利用patch跟新源码(不用再下载完整的Tarball)
    1)patch跟新的思想和好处:没有改动过的文件的目标文件根本就不需要在进行编译,而且动过的文件又可以通过make来自动的update。
如此以来,我们原先的设置(makefile文件里的规则)将不需要进行重新改写或者检测,可以节省很多时间。
    2)具体做法:找出源代码的旧版与新版的差别(用diff命令),再通过相关命令(patch)进行更新。所以软件开发商在跟新源码后,
都会提供所谓的patch file(补丁)文件,用来直接跟新源码。
    3)diff与patch的例子:
    假设有二个文件包 main-0.1.tgz   main_0.1_to_main_0.2.patch 在/root目录下
    tar -zxf main-0.1.tgz 解压缩源文件包
    cd main-0.1    进入文件main-0.1
    patch -p1 < ../main_0.1_to_main_0.2.patch  目前在main.0.1目录,注意patch文件的相对路径
    make clean main
    ./main
    make install 安装
    main 直接输入命令就执行
    *注意:pctch文件只是对源码的更新并不是对软件的更新,还是需要对软件进行编译后才能得到最终正确的软件!!因为patch的功能
只是更新源码而已。要牢记。
    *patch必须存在才能完成二个版本的源码更新,不能实现源码的跨版本更新,例如kernel2.4.xx和kernel2.6.xx,是无法使用patch
文件来更新的,他们架构都不一样了。假设kernel2.4.20更新到kernel2.4.26,就必须使用patch2.4.21 2.4.22 2.4.23 ... 2.4.26六个文件
“依次更新”才可以。

10.函数库管理
    1)动态函数库 扩展名 libxxx.a的类型
    2)静态函数库 扩展名 libxxx.so的类型
    3)目前linux大多是将函数库做成动态函数库,再来就是需要增加函数库的读取性能,将常用的函数库加载到内存当中(缓存,cache)
如此一来,当软件使用动态函数库时,就不需要从硬盘中读取,这样就增进了动态函数库的读取速度。
    4)如何将动态函数库加载到高速缓存?
    a.首先,我们将/etc/ld.so.conf里面写下想要读入高速缓存当中的动态函数库所在的目录!是目录不是文件。
    b.接下来就是利用ldconfig这个可执行程序将/etc/ld.so.conf的数据读入缓存。
    c.同时也将数据记录一份在/etc/ld.so.cache这个文件中。
    
11.函数的动态库解析:ldd
    1)如何判断可执行程序的二进制文件含有哪些动态的函数库?利用ldd就可以了。
    2)例如想知道/usr/bin/passwd这个程序含有那些动态库。可以这样做:
        ldd /usr/bin/passwd    找出这个文件的函数库数据

    
 

猜你喜欢

转载自blog.csdn.net/hzj_001/article/details/81587713
今日推荐