博文二十二:程序包管理之编译

一、简述

    什么是编译安装?

        用户在自己所在平台编写的应用程序(源代码格式),并不能满足所有平台用户的使用,所以需要使用的用户在自己的平台环境下进行编译,编译成适合自己平台的应用程序进行安装和使用。

        源代码组织格式

            多文件:文件中的代码之间,很可能存在跨文件的依赖关系。

            C、C++:make(configure --> Makefile.in --> makefile),

            java:maven。

    编译安装的好处?

           可进行软件功能的自定义。

            优化编译参数,提高性能。

            解决不必要的软件间依赖。

    编译安装的流程?

         testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装。  

源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接 --> 执行
        C代码编译安装的三步骤
./configure
    1)通过选项传递参数,指定启用特性、安装路径等,执行时会参考用户的指定以及Makefile.in文件生成makefile
    2)检查各特性所依赖到的外部环境,如依赖关系未被找到,则configure会报错
make
    根据makefile文件,构建应用程序
make install

二、使用

    1.开发工具

autoconf:生成configure脚本
sutomake:生成Makefile.in

# 建议安装前查看INSTALL,README

    2.编译C源代码

        前提:提供开发工具及开发环境

            开发工具:make,gcc等

            开发环境:开发库,头文件(glibc:标准库)

            通过“包组”提供的开发组件

CentOS 7 
[root@wybaron_host1015 ~]# yum grouplist "Development Tools"
...
可用组:
   开发工具
完成

CentOS 6
[root@wybaron-host1005 ~]# yum grouplist "Development Tools" "Server Platform Development"
...
有效的组:
   开发工具
   服务器平台开发
完成

# 注:CentOS 6是“Development Tools”“Server Platform Development”;Centos7只有“开发工具” 

    3.编译环境搭建(CentOS 7为例)

[root@wybaron_host1015 ~]# yum groupinstall "开发工具" -y
...
已安装:
  autoconf.noarch 0:2.69-11.el7                  automake.noarch 0:1.13.4-3.el7                             
  bison.x86_64 0:3.0.4-1.el7                     byacc.x86_64 0:1.9.20130304-3.el7                          
  cscope.x86_64 0:15.8-10.el7                    ctags.x86_64 0:5.8-13.el7                                  
  diffstat.x86_64 0:1.57-4.el7                   doxygen.x86_64 1:1.8.5-3.el7                               
  flex.x86_64 0:2.5.37-3.el7                     gcc.x86_64 0:4.8.5-28.el7_5.1                              
  gcc-c++.x86_64 0:4.8.5-28.el7_5.1              gcc-gfortran.x86_64 0:4.8.5-28.el7_5.1                     
  git.x86_64 0:1.8.3.1-14.el7_5                  indent.x86_64 0:2.2.11-13.el7                              
  intltool.noarch 0:0.50.2-7.el7                 libtool.x86_64 0:2.4.2-22.el7_3                            
  patch.x86_64 0:2.7.1-10.el7_5                  patchutils.x86_64 0:0.3.3-4.el7                            
  rcs.x86_64 0:5.9.0-5.el7                       redhat-rpm-config.noarch 0:9.1.0-80.el7.centos             
  rpm-build.x86_64 0:4.11.3-32.el7               rpm-sign.x86_64 0:4.11.3-32.el7                            
  subversion.x86_64 0:1.7.14-14.el7              swig.x86_64 0:2.0.10-5.el7                                 
  systemtap.x86_64 0:3.2-8.el7_5                

作为依赖被安装:
  avahi-libs.x86_64 0:0.6.31-19.el7                   cpp.x86_64 0:4.8.5-28.el7_5.1                         
  dwz.x86_64 0:0.11-3.el7                             efivar-libs.x86_64 0:31-4.el7                         
  gettext-common-devel.noarch 0:0.19.8.1-2.el7        gettext-devel.x86_64 0:0.19.8.1-2.el7                 
  glibc-devel.x86_64 0:2.17-222.el7                   glibc-headers.x86_64 0:2.17-222.el7                   
  gnutls.x86_64 0:3.3.26-9.el7                        kernel-debug-devel.x86_64 0:3.10.0-862.14.4.el7       
  kernel-headers.x86_64 0:3.10.0-862.14.4.el7         libgfortran.x86_64 0:4.8.5-28.el7_5.1                 
  libgnome-keyring.x86_64 0:3.12.0-1.el7              libmpc.x86_64 0:1.0.1-3.el7                           
  libquadmath.x86_64 0:4.8.5-28.el7_5.1               libquadmath-devel.x86_64 0:4.8.5-28.el7_5.1           
  libstdc++-devel.x86_64 0:4.8.5-28.el7_5.1           m4.x86_64 0:1.4.16-10.el7                             
  mokutil.x86_64 0:12-2.el7                           mpfr.x86_64 0:3.1.1-4.el7                             
  neon.x86_64 0:0.30.0-3.el7                          nettle.x86_64 0:2.7.1-8.el7                           
  pakchois.x86_64 0:0.4-10.el7                        perl-Error.noarch 1:0.17020-2.el7                     
  perl-Git.noarch 0:1.8.3.1-14.el7_5                  perl-TermReadKey.x86_64 0:2.30-20.el7                 
  perl-Thread-Queue.noarch 0:3.02-2.el7               perl-XML-Parser.x86_64 0:2.41-10.el7                  
  perl-srpm-macros.noarch 0:1-8.el7                   subversion-libs.x86_64 0:1.7.14-14.el7                
  systemtap-client.x86_64 0:3.2-8.el7_5               systemtap-devel.x86_64 0:3.2-8.el7_5                  
  trousers.x86_64 0:0.3.14-2.el7                     

作为依赖被升级:
  libgcc.x86_64 0:4.8.5-28.el7_5.1                    libgomp.x86_64 0:4.8.5-28.el7_5.1                     
  libstdc++.x86_64 0:4.8.5-28.el7_5.1                 systemtap-runtime.x86_64 0:3.2-8.el7_5                

完毕!

    4.编译详细步骤

        4.1)configure脚本

            选项的作用:用于指定安装位置、指定启用特性等。

--help 获取其支持使用的选项
  选项分类:
    安装路径设定:
      --prefix=/PATH/TO/SOMEWHERE 指定默认安装的位置(默认为/usr/local/)
      --sysconfdir=/PATH/TO/SOMEWHERE 指定配置文件的安装位置
    System types(系统类型):
      Optional Features(可选特性)
        --disable-FEATURE
        --enable-FEATURE[=ARG]
      Optional Packages(可选包)
        --with-PACKAGE[=ARG]
        --without-PACKAGE
        4.2)make
        4.3)make install

            安装后配置:

                A)导出二进制程序目录至PATH环境变量中

                    编辑文件/etc/profile.d/NAME.sh

                        export PATH=/PATH/TO/BIN:$PATH

                B)导出库文件路径

                    编辑/etc/ld.so.conf.d/NAME.conf

                        添加新的库文件所在目录至此文件中

                    让系统重新生成缓存

                        ldconfig [-v]

                C)导出头文件

                    基于链接的方式实现: ln -sv

                D)导出帮助手册

                    编辑/etc/man.config文件

                        添加一个MANPATH

三、补充

    开源程序源代码的获取

        官方自建站点
http://apache.org/
https://mariadb.org/
...
        代码托管
https://sourceforge.net/
https://github.com/
https://gitee.com/
...

 

转载于:https://my.oschina.net/comics/blog/2245161

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值