什么是开放源码,编译程序和可执行文件

    开放源码:就是程序代码,写给人类看的程序语言,但机器不认识,所以无法执行;
    编译程序:将程序代码转译成为机器看得懂的语言;
    可执行文件:经过编译程序变成二进制程序后,机器看得懂所以可以执行的档案;

什么是函数库
    函数库:是一种可执行代码的二进制格式,类似子程序的角色,可以被调用来执行一段功能函数;又分为动态与静态函数库,因为其没有程序执行入口,所以不能独立运行;
    常用存放函数库的目录: /lib,/usr/lib,/usr/local/lib;
    内核提供的函数库:/lib/modules;

   库的配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf;
   系统核心库:glibc;
   静态库
       1,文件名一般是libxxx.a;
       2,整个函数库的所有数据都会被整合进目标代码中;
       3,执行程序不再需要外部的函数库支持;
       4,如果静态函数库改变,整个程序必须重新编译;
       5,利用函数库编译成的文件较大;
   动态库
       1,文件名一般是libxxx.so;
       2,编译时不被编译进目标代码,程序执行到相关函数时才调用函数库中相应函数;
       3,动态函数库产生的可执行文件较小;
       4,动态函数库的改变不会影响程序,所以函数库升级方便;
       5,由于函数库没有被整合进程序,所以程序的运行环境必须提供相应的库(不要随意删除和移动);

什么是make与configure
   make:make是一个程序,根据makefile的定义,调用源代码和函数库以及编译器来进行编译;
   configure:检测系统环境,以及该环境是否有软件所需要的其他功能,以及定义如何去编译,然后生成makefile文件;
       configure检测的内容:
           1,是否有合适的编译程序可以编译本软件的代码;
           2,是否已经存在本软件所需要的函数库,或者其他依赖的软件;
           3,操作系统平台是否适合本软件,包括linux的核心版本;
           4,核心的表头定义文件(header include)是否存在;
Tarball软件:就是将软件的所有源代码先以tar打包,然后在压缩的文件,解压后通常有以下内容
   1,源代码文件;
   2,检测程序文件(可能是configure或config等文件名);
   3,软件的简易说明与安装说明(INSTALL或README);
什么是安装软件
   1,将文件解压至指定的目录;
   2,生成相应的数据文件;
为什么要升级软件
   1,需要新的功能,但旧版软件没有;
   2,旧版软件可能有bug或漏洞,需要进行升级;
   3,旧版软件的执行效率低,或不能达到需求;
升级的方法分为两大类
   1,直接以源码通过编译来安装与升级;
   2,直接以编译好的binary program来安装与升级;
源码包的安装流程
    1,将源码包从厂商网页下载下来;
    2,解压源码包;
    3,开始用gcc进行源码的编译(会产生目标文件object files);
    4,然后以gcc进行函数库,主和子程序的链接,以形成主要的二进制文件;
    5,将上面的二进制文件以及相关的配置文件安装到主机中;

   源代码 ==> 编译(二进制) ==> 链接 ==> 运行;
       编译:将源代码转换成计算机可识别的二进制格式;
           常见linux中的编译器:GCC,G++;
       链接:将程序与库的调用入口关联起来;

           动态链接:调用共享库;
           静态链接:将所有依赖的库封装到程序中;
源码安装的优点
   1,有些特性是编译选定的,如果编译未选定此特性,将无法使用;
   2,rpm的版本会落后于源码包,甚至落后很多,源码包升级比rpm更方便,不需要等待rpm制作者升级;
软件的组成部分
   二进制程序:通常的安装目录在/bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin;
       程序包含CPU指令和数据;
   库文件:可让其他程序调用,通常的目录/lib,/usr/lib,/usr/local/lib;
   配置文件:通常目录/etc,配置文件一般为纯文本文件或XML文件;
   帮助文件:通常有man,README,INSTALL等;README和INSTALL通常放在/usr/share/doc中;

源码包安装的步骤
   1,取得源码文件:将tarball文件在/usr/local/src目录下解压缩(系统推荐,非必须);
   2,取得步骤流程:进入解压后的目录中,查阅INSTALL和README等文件(重要);
   3,解决依赖关系,安装所需要的软件:根据INSTALL和README的内容检查并安装相应软件;
   4,建立makefile:使用configure或config检测安装环境,并创建Makefile文件;
   5,编译:使用该目录下的Makefile作为make程序的参数配置文件,来进行编译或其他动作;
   6,安装:使用make,并以Makefile这个参数配置文件,依据install这个target的指定来安装到正确的路径;
源码包安装的指令下达方式
    1,./configure:该步骤让用户选定编译特性,检查系统环境和相关软件属性,然后生成Makefile;
    2,make clean:make会读取Makefile中关于clean的操作,可删除目标档案,在无法确定源代码中有没有包含上次编译过的目标文件(*.o)使用,以保证是自己的机器所编译的执行档;(可根据实际情况省略)
    3,make:make依据Makefile中的设定的操作进行编译,将源代码编译成可以被执行的可执行文件;
    4,make install:make根据Makefile中关于install的项目,将所编译完成的数据安装到执行目录中;
为了方便管理,通常建议
    1,将源码包数据解压到/usr/local/src中;
    2,安装时,最好安装到/usr/local这个默认路径下;
    3,考虑未来反安装步骤,最好将每个软件单独安装在/usr/local下;
    4,为安装到单独目录的软件的man page加入man path查找路径中;

开始安装源码包
   1,准备开发环境:为程序提供编译环境;
   2,解压下载好的tar包,并查阅INSTALL和README文件:tar -zxvf xxx.tar.gz;
   3,查看configure所支持的参数,并建立Makefile文件:./configure --help;
       --help获取脚本的使用帮助;
       --prefix=/path/to/somewhere     指定软件安装的位置;
       --sysconfdir=/path/to/config_file     指定配置文件的路径;
   4,make clean(可选)
   5,make 编译;
   6,make check    测试编译后的文件是否正确(可选操作,不是所有的Makefile都定义了此功能)
   6,make install    安装;
进一步的操作
   1,修改PATH环境变量,让系统可以识别此程序的二进制文件路径;
       a:在/etc/profile中指定PATH变量;
       b:在/etc/profile.d/目录下建立一个以.sh的文件,然后定义PATH变量;
   2,默认情况下,系统搜索库文件的路径(/lib, /usr/lib); 要增添额外搜寻路径;
       在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中;
       ldconfig:重启后才生效,如果要立即生效,使用此命令;
           -v:显示重新搜寻库的过程;

   3,头文件:输出给系统,头文件中包含了自己所提供的函数属性,用于被其他二次开发所使用的文件;
           默认目录:/usr/include;
           增添头文件搜寻路径,使用链接进行
               a:ln -s /usr/local/name/include/* /usr/include;
               b:ln -s /usr/local/name/include /usr/include/name;

   4,man文件路径:默认安装在--prefix指定的目录下的man目录中,而系统是在/usr/share/man中查找的;
               a:vim /etc/man.config;
                       添加:MANPATH /path/to/file:指定查找man文件的路径;
               b:man -M /PATH/TO/MAN_DIR COMMAND;

如何将函数库加入到内存中:如果将常用的动态函数库预先加载到内存中,可以增加动态函数库的读取速度;
   1,在/etc/ld.do.conf中新增一行写入想要读入缓存中的动态函数库所在的目录,例如:/usr/lib/mysql;
   2,使用ldconfig将/etc/ld.do.conf的资料读入内存中;
   3,同时也将数据记录一份在/etc/ld.so.cache文件中;
   ldconfig还可以用于判断动态函数库的链接信息
       ldconfig [-f conf] [-C cache]
       ldconfig [-p]
          -f conf:conf指某个文件名,即使用conf作为libarary函数库的取得路径,而不是以/etc/ld.so.conf为默认值
         -C cache:cache指某个文件名,即使用cache作为快取暂存的函数库资料,而不是以/etc/ld.so.cache为默认值
         -p:列出目前所有函数库资料内容(在/etc/ld.so.cache内的资料)
程序的动态函数库解析:ldd
    用于判断某个可执行的二进制文件含有什么动态函数库;
    ldd [-vdr] [filename]:查看命令与库的依赖关系;
         -v:列出所有内容;
         -d:重新将资料有意识到link点显示出来;
         -r:将ELF有关的错误内容显示出来;
         通常查询出来的第一个结果是程序的访问入口,不是依赖的库文件;

检查下载后软件包的正确性
   md5sum/sha1sum [-bvt] filename          
   md5sum/sha1sum [--status|--warn] --check filename

-b:使用binary的读档方式,默认为windows/DOS档案型态的读取方式

-c:检验文件指纹

       -t:以文件方式来读取指纹

可以用这两条命令为系统关键文件的指纹记录下来,用于保证系统的安全,比如/etc/passwd和/etc/shadow;

示例:源码安装httpd server(apache server)

下载所需要的软件包:

httpd:http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.9.tar.gz

apr:http://apache.fayea.com/apache-mirror//apr/apr-1.5.1.tar.gz;

apr-util:http://apache.fayea.com/apache-mirror//apr/apr-util-1.5.3.tar.gz;

操作系统:CentOS6.4,默认安装的软件包:basic默认;

准备工作:将下载的源码包下载到/usr/src目录下,并解压:tar -zxvf xxxx.tar.gz;

安装apr

1,cd /usr/src/apr-1.5.1

2,./configure --prefix=/usr/local/apr

3,make

4,make install

安装apr-util

1,cd /usr/src/apr-util-1.5.3

2,./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/

3,make

4,make install

安装httpd(apache)

1,cd /usr/src/httpd-2.4.9

2,./configure --prefix=/usr/local/httpd-2.4.9 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

注:这里只是为了演示源码包的安装,如果需要定制httpd的功能,使用./configure --help,查阅帮助信息;

3,make

4,make install

将httpd的bin目录加入到PATH中

1,vim /etc/profile.d/httpd.sh

2,输入"export PATH=$PATH:/usr/local/httpd-2.4.9/bin",保存退出;

3,source /etc/profile

启动apache:apachectl start

在浏览器中输入服务器的IP地址,如果看到“It works!“表示安装成功!

停止apache:apachectl stop

删除apache:将/usr/local/httpd-2.4.9目录删除即可;

声明:本文为学习笔记,内容参考多方资料,如涉及版权问题,请告知本人,谢谢!

转载于:https://blog.51cto.com/jdgoo/1410009

Linux中源码包的管理相关推荐

  1. linux上源码安装mysql,Linux中源码包安装MySQL的shell脚本

    #!/bin/bash #安装MYSQL yum -y install ncurses-devel yum -y install autoconf tar zxf /cmake--C / cd /cm ...

  2. linux中源码安装node

    Linux上安装Node.js 直接使用已经编译好的包 node 官网已经把linux 下载版本更改为已经编译好的版本了,我们可以直接下载解压后使用: wget https://nodejs.org/ ...

  3. 5.3.3.tat.gz php_一步步在LINUX中源码安装PHP运行平台

    一步步在LINUX中源码安装PHP运行平台 一步步在LINUX中源码安装PHP运行平台 本人是LINUX新手, 今天我们要学习一下如何在LINUX环境下安装PHP运行环境 目标:在LINUX环境下源码 ...

  4. linux crontab 每5分钟执行一次_第十一章:走进Linux世界——源码包管理and任务计划。...

    一.文件管理 (1)概述 Source Code 源代码经过GCC.C++编译环境编译才能运行 可以设定个人设置,开关功能 (2)源码包管理 获取源码包--官网下载到真机,然后 rz 命令上传到虚拟机 ...

  5. linux系统源码安装教程,linux之源码包安装步骤

    源码:程序代码,人类可看懂的代码 编译程序:将程序代码编译成机器看懂的代码 二进制文件:经过编译程序变为二进制程序后,机器可执行的文件 make和configure: make是一支程序,会自动寻找M ...

  6. linux源码编译安装lamp环境搭建,linux下源码包编译安装LAMP环境

    1.下载所需的源码包 Httpd-2.4.10  apr-1.5.1  apr-util-1.5.3  pcre-8.33(这些均可在Apache官网进行下载) Mysql-5.5.39    php ...

  7. yum更换源和下载rpm包、Linux软件源码包方式安装

    2019独角兽企业重金招聘Python工程师标准>>> 更换yum仓库源 cp -r /etc/yum.repos.d/ /etc/yum.repos.d.bak # 备份系统自带仓 ...

  8. linux httpd 源码包下载,Apache httpd-2.4.33源码包编译安装教程

    实验环境:centos6.5 防火墙需要关闭 下载源码包 wget http://archive.apache.org/dist/apr/apr-util-1.5.2.tar.gz wget http ...

  9. linux php源码包 安装openssl 和curl 扩展

    2019独角兽企业重金招聘Python工程师标准>>> 1. 安装openssl 解压php的源码包 tar zxvf php-5.3.8.tar.gz  cd soft/php-5 ...

最新文章

  1. codevs 1085 数字游戏 dp或者暴搜
  2. 利用GPU训练网络时遇到的一些问题
  3. SpringBoot实现定时任务
  4. 深度学习实践:计算机视觉_深度学习与传统计算机视觉技术:您应该选择哪个?
  5. [蓝桥杯2015决赛]奇怪的数列-双指针+模拟
  6. Java并行编程中的“可调用”与“可运行”任务
  7. 蒸汽机器人q和锤石q_英雄联盟:圣杯锤石的启发,辅助的作用是否应该更倾向多元化?...
  8. linux下阻塞的系统调用,Linux下文件的阻塞与非阻塞对部分系统调用的影响
  9. UVa 1640 (计数) The Counting Problem
  10. 【转】 STM32 入门教程 系统时钟 SysTick
  11. CSS学习1(内联样式,内部样式,外部样式,选择器)
  12. 卡诺模型案例分析_需求分析神器 | 如何用卡诺模型分析需求
  13. 08年度的佳作——《真・恋姫†無双》玩后感(蜀国篇)+AGTH真正提取大法
  14. POJ 1581 A Contesting Decision
  15. Spark组件之GraphX学习9--使用pregel函数求单源最短路径
  16. 联想拯救者u盘安装linux系统,联想拯救者Y7000系统盘重装如何设置U盘启动
  17. 动态规划-骨头收集者(一维数组,二维数组)
  18. Speedoffice(word)中如何清除文字的文本格式
  19. qq显示下线通知什么意思_qq下线通知是怎么回事
  20. 在线微信聊天生成器,抖音微信聊天搞笑视频制作神器

热门文章

  1. mysql的越过用户权限表登录
  2. vb inet 一些方法
  3. WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)
  4. 14个Xcode中常用的快捷键操作
  5. 前端技术选型的遗憾和经验教训
  6. MYSQL实现ORDER BY LIMIT的方法以及优先队列(堆排序)
  7. ios开发日记-18上传appStore时,遇到错误,代码为ERROR ITMS-90049
  8. php 使用curl模拟登录discuz以及模拟发帖
  9. RunnableException与CheckedException
  10. ios4.2文件夹及多任务