设为首页 收藏本站
查看: 520|回复: 1

[经验分享] Linux程序包编译安装

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-2 08:32:39 | 显示全部楼层 |阅读模式
一、源代码简介(文件中的代码之间,很可能存在跨文件依赖关系)

                源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。
二、源代码的编译过程

        由于程序源代码到可被计算机识别并运行的指令是需要多步骤处理的:程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接。

        这里以C,C++为例做为说明。程序员写完C,C++源代码后需要把源代码进行预处理,即通过预处理器把源代码分割或处理成为特定的符号用来支持宏调用。预处理后进一步通过编译器(gcc)编译为目标代码(object code),它由接近于机器语言的代码组成。目标代码通过编译器编译后才能生成可供CPU识别的机器代码、机器指令。由于C,C++在编写中大量调用了库文件,所以在编译后需要把源代码中使用到的库做好链接。形成能够依赖于共享库独立运行代码。

        LINUX包的二进制应用程序一般包含(二进制文件、库文件、配置文件、帮助文件)。且在LINUX中二进制应用程序的组成部分为:

二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin

库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64

配置文件:/etc, /etc/DIRECTORY, /usr/local/etc

帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

三、程序包编译安装的需求
                在某些情况下,比如某个程序已经更新了新版本,但是因为官方或其他组织还没有编译成RPM包,而我们此时需要用到此新版本程序的功能,或者当官方提供的RPM包中因为集成了太多我们不需要的功能或缺少某些功能时。此时我们就需要考虑自己通过源代码编译安装成可供LINUX识别的二进制安装包。
                但是要把源代码变成可执行的二进制文件需要以下过程:程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接。想到这里我们又不由自主的奔溃了。而且因为程序在开发中一般是使用模块开发的,所以文件中的代码之间,很可能存在跨文件依赖关系。所以为了方便用户能够自主编译源代码。所以有了项目管理器(make)。
四、编译安装三步骤
C、C++: make (configure --> Makefile.in --> makefile)

C代码编译安装三步骤:
    前提:提供开发工具及开发环境
        开发工具:make, gcc等
        开发环境:开发库,头文件
            glibc:标准库

Centos 5,6,7通过“包组”提供开发组件
    CentOS 6: "Development Tools", "Server Platform Development",

①、./configure:
    (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
    (2) 检查依赖到的外部环境,如果此时依赖的外部环境没有配置,会导致报错。第一步报错会导致make不能执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
选项:指定安装位置、指定启用的特性

    --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



②、make:
    根据makefile文件,构建应用程序;
③、make install
    把二进制文件、库文件、配置文件、帮助文件复制到对应的目录中
注意事项:
    configure和Makefile.in是程序员通过两个工具生成并提供给我们使用的

        开发工具:
            autoconf: 生成configure脚本
            automake:生成Makefile.in
        建议:安装前查看INSTALL,README

开源程序源代码的获取:
    官方自建站点:
        apache.org (ASF)
        mariadb.org
        ...
    代码托管:
        SourceForge
        Github.com
        code.google.com

五、编译安装httpd(httpd-2.2.29)
①、通过官方网站下载http-2.2.29.tar.gz此源代码包,并查看INSTALL文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[iyunv@localhost httpd-2.2.29]# tar -zxvf httpd-2.2.29.tar.gz
[iyunv@localhost ~]# cd httpd-2.2.29
[iyunv@localhost httpd-2.2.29]# ls
ABOUT_APACHE   configure.in    LAYOUT         os
acinclude.m4   docs            libhttpd.dep   README
Apache.dsw     emacs-style     libhttpd.dsp   README.platforms
build          httpd.dep       libhttpd.mak   README-win32.txt
BuildAll.dsp   httpd.dsp       LICENSE        ROADMAP
BuildBin.dsp   httpd.mak       Makefile.in    server
buildconf      httpd.spec      Makefile.win   srclib
CHANGES        include         modules        support
config.layout  INSTALL         NOTICE         test
configure      InstallBin.dsp  NWGNUmakefile  VERSIONING
[iyunv@localhost httpd-2.2.29]# more INSTALL
  APACHE INSTALLATION OVERVIEW

  Quick Start - Unix
  ------------------

  For complete installation documentation, see [ht]docs/manual/install.html or
  http://httpd.apache.org/docs/2.2/install.html

     $ ./configure --prefix=PREFIX
     $ make
     $ make install
     $ PREFIX/bin/apachectl start
     ........
#这里建议编译安装的时候首先读INSTALL或README文件。



②、因为每个源码提供的选项不尽相同,所以建议通过./configure --help查看需要的选项
1
[iyunv@localhost httpd-2.2.29]# ./configure --help



③、通过./configure 跟特定需要的选择开始构建生产makefile文件
1
<br>




六、编译安装后的配置
(1) 导出二进制程序目录至PATH环境变量中;
    编辑文件/etc/profile.d/NAME.sh
    export PATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径

    编辑/etc/ld.so.conf.d/NAME.conf
    添加新的库文件所在目录至此文件中;
    让系统重新生成缓存:

    ldconfig [-v]
(3) 导出头文件

    基于链接的方式实现:
    ln -sv
(4) 导出帮助手册
    编辑/etc/man.config文件
    添加一个MANPATH


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108518-1-1.html 上篇帖子: Linux程序包管理--源码编译的原理和基本方法 下篇帖子: 把/root/目录下的所有目录拷贝到/tmp/ Linux 程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表