当前位置: 首页 > news >正文

CentOS程序包管理、下

CentOS程序包管理(3)
应用程序的编译安装(C/C++)

为什么要进行应用程序源代码的编译安装?
    1.对应应用程序的程序包不能直接获取到;
    2.在已经编译好的二进制格式的程序的功能不包含我们所需要的;
    3.在已经编译好的二进制格式的程序中,包含太多的我们所不需要的功能;

软件项目管理工具:
    C/C++:make
        Makefile

应用程序源代码的分类:
    1.由程序员直接打包的源代码
        name-VERSION.tar.gz
    2.由第三方利用rpm工具制作的rpm源代码包:
        name-VERSION-release.src.rpm

源代码的组织形式:
    1.一个应用程序包含多个文件;
    2.某个文件中的不同的代码段之间,甚至不同文件的代码段之间都可能存在依赖关系;

应用程序源代码的编译过程:
    源代码 --> 预处理(预处理器,CPP) --> 编译(编译器,CC[gcc]) --> 汇编(汇编器) --> 链接(链接器) --> 用于执行操作的二进制程序文件

Makefile文件的功能:
    1.包含了各个程序源代码文件之间的关系;
    2.决定文件的编译顺序;
    3.使用哪个预处理器进程何种预处理操作;
    4.使用哪个编译器进程何种编译操作;
    ...

程序员通过使用专用工具,对于所有的源代码文件进行内容的分析和提取,并构建出一个同一的makefile文件的绝对模板,即:Makefile.in

有了这个模板,用户可以根据自己的需求,自行构建Makefile文件,从而可以实现个性化的编译过程;帮助用户生成Makefile文件的是一个名为"configure"的脚本;

开发工具:
    autoconf:帮助用户生成configure脚本文件;
    automake:帮助用户生成Makefile.in的模板文件;

建议:在获取任何源代码包并解压缩之后,要去读取其中随程序源代码提供的"INSTALL"或"README"类的文档文件,以获知该应用程序源代码的编译步骤;

开源应用程序的源代码的获取方式:
    1.官方自建的资源站点:
        apache.org(ASF)
        MariaDB --> mariadb.org
        varnish-cache.org
        ...

    2.代码托管站点:
        SourceForge
        Github
        code.google.com

Linux中进行C/C++源代码编译时使用的编译器:gcc,GNU C Compiler

在使用NAT模式联网进行软件包的安装的时候如果出现/var/run/yum.pid 已被锁定,PID 为 4040 的另一个程序正在运行等相同问题,则~]# rm -f /var/run/yum.pid
在执行安装命令~]# yum install gcc

编译源代码所需的开发环境:(程序包组)
    CentOS 7:
        Development Tools
        Compatibility Libraries

    CentOS 6:
        Development Tools
        Server Platform Development

注意:程序包组中所包含的开发环境并不是非常完整,如果某个应用程序在编译时有其他环境要求的话,需要安装对应应用程序的开发工具包;
    如果有rpm格式的开发工具包,其名称为name-devel-VERSION-release.rpm,则可以使用yum直接安装;
    如果没有对应的rpm格式的开发工具包,则需要优先编译安装开发工具;

编译源代码安装应用程序的三大步骤:
1.利用configure脚本生成Makefile文件;
~]# ./configure [option]...
--help
--prefix:选择程序安装的路径;
--enable-function:
--with-function:

2.使用项目管理工具"make"进行编译;
    注意:有一些应用程序在实施编译操作之前需要测试(make test)

3.使用"make install"命令进行编译后的二进制文件的最后的安装;

编译安装完成以后的收尾工作:
1.导出二进制文件的路径;
2.导出库文件路径;
3.导出头文件路径(可选);
4.导出帮助文件路径;

尝试编译安装httpd:(这些安装包首先要事先存在于你的系统内存当中,如果没有可以到相关网站进行下载)
1.安装apr
~]# tar xf apr-1.5.2-tar.bz2
~]# cd apr-1.5.2
~]# ./configure --prefix=/usr/local/apr-1.5.2
~]# make [-j 4]
~]# make install

2.安装apr-util
    ~]# tar xf apr-util-1.5.4-tar.bz2
    ~]# cd apr-util-1.5.4
    ~]# ./configure --prefix=/usr/local/apr-util-1.5.4 --with-apr=/usr/local/apr-1.5.2
    ~]# make [-j 4]
    ~]# make install

3.安装httpd
    ~]# tar xf httpd-2.4.29-tar.bz2
    ~]# cd httpd-2.4.29
    ~]# ./configure --prefix=/usr/local/apache-2.4.29 --with-apr=/usr/local/apr-1.5.4 --with-apr-util=/usr/local/apr-util-1.5.4 --with-pcre
    ~]# make [-j 4]
    ~]# make install

    注:因为需要pcre的支持,所以需要事先安装pcre-devel包;

收尾工作:
    1.导出二进制文件:
        创建一个文件:/etc/profile.d/httpd.sh
            export PATH=/usr/local/apache-2.4.29/bin:$PATH
    2.导出库文件:
        创建一个文件:/etc/ld.so.conf.d/httpd.conf
            /usr/local/apache-2.4.29/lib64
    3.导出头文件;
        创建符号链接:
            ~]# ln -sv /usr/local/apache-2.4.29/include /usr/include/httpd
    4.导出帮助文档:
        对于CentOS7来说,在导出二进制文件时已经自动导出了帮助文档;如果没有成功导出,则需要在/etc/man_db.conf文件中添加一行:
            MANPATH_MAP=/usr/local/apache-2.4.29/bin /usr/local/apache-2.4.29/man

        对于CentOS6来说,需要手动导出:
            在/etc/man.config中添加一行:
                MANPATH=/usr/local/apache-2.4.29/man

转载于:https://blog.51cto.com/huliheeyu/2096258

相关文章:

  • Linux-RedHat 9.0 安装-总结
  • 用户登陆
  • 【OCM】Exam Souvenir 20140825
  • ThinkPHP5下自己写日志
  • javascript验证键盘keycode
  • leetcode-169-Majority Element
  • Fabric结合GTID实现Mysql复制高可用
  • 标签button:点击button按钮时,出现了页面自动刷新的情况
  • [转]查询表达式 (F#)
  • UINavigationControlle 之 UINavigationBar及navigationItem关系探讨
  • sublime text2快捷键的使用
  • windows创建进程的3种方式下各API调用层次
  • 看看别人家的孩子
  • nginx和dubbo微服务架构图
  • 北京西客站火车行李托运指南
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Angular2开发踩坑系列-生产环境编译
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • github从入门到放弃(1)
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript DOM 10 - 滚动
  • Java比较器对数组,集合排序
  • js继承的实现方法
  • js正则,这点儿就够用了
  • Vue 2.3、2.4 知识点小结
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我有几个粽子,和一个故事
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用简单代码看卷积组块发展
  • linux 淘宝开源监控工具tsar
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​flutter 代码混淆
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #### go map 底层结构 ####
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (30)数组元素和与数字和的绝对差
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (js)循环条件满足时终止循环
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [1]-基于图搜索的路径规划基础
  • [1204 寻找子串位置] 解题报告
  • [3300万人的聊天室] 作为产品的上游公司该如何?