软件安装与源码编译

本文详细介绍了Linux系统中软件的源码编译过程,包括gcc、make的使用,以及Makefile的编写。同时讲解了函数库(静态库与动态库)的区别和作用。此外,还阐述了通过yum和RPM命令进行软件管理的方法,包括查询、安装和管理已安装的软件包。
摘要由CSDN通过智能技术生成

源码编译过程gcc

编写源码过程略过,其他过程如下:
1) gcc -c source targetname(这步是编译)gcc -c 源码
2)(如果有调用其他函数才需要,这步是链接) gcc -o 生成文件名 需要链接的.o文件1 需要链接的.o文件2
3)./生成文件名执行
在这里插入图片描述

make

make 有这些好处:

  • 简化编译时所需要下达的指令;
  • 若在编译完成之后,修改了某个原始码文件,则 make 仅会针对被修改了的文件进行编译,其他的 object file
    不会被更动;
  • 最后可以依照相依性来更新 (update) 执行文件。

基本的makefile 规则是这样的:
目标(target): 目标文件 1 目标文件 2
< tab > gcc -o 欲建立的执行文件 目标文件 1 目标文件 2
同时我们可以构建多个目标,例如常用的clean:
在这里插入图片描述
变量的基本语法为:

  1. 变量与变量内容以『=』隔开,同时两边可以具有空格;
  2. 变量左边不可以有 ,例如上面范例的第一行 LIBS 左边不可以是 ;
  3. 变量与变量内容在『=』两边不能具有『:』;
  4. 在习惯上,变数最好是以『大写字母』为主;
  5. 运用变量时,以 ${变量} 或 $(变量) 使用;
  6. 在该 shell 的环境变量是可以被套用的,例如提到的 CFLAGS 这个变数!
  7. 在指令列模式也可以给予变量。

在这里插入图片描述
tarball 软件之安装的指令下达方式:

  1. ./configure
    这个步骤就是在建立 Makefile 这个文件啰!通常程序开发者会写一支 scripts 来检查你的 Linux 系统、相
    关的软件属性等等,这个步骤相当的重要, 因为未来你的安装信息都是这一步骤内完成的!另外,这个步
    骤的相关信息应该要参考一下该目录下的 README 或 INSTALL 相关的文件!
  2. make clean
    make 会读取 Makefile 中关于 clean 的工作。这个步骤不一定会有,但是希望执行一下,因为他可以去除
    目标文件!因为谁也不确定原始码里面到底有没有包含上次编译过的目标文件 (*.o) 存在,所以当然还是
    清除一下比较妥当的。 至少等一下新编译出来的执行档我们可以确定是使用自己的机器所编译完成的嘛!
  3. make
    make 会依据 Makefile 当中的预设工作进行编译的行为!编译的工作主要是进行 gcc 来将原始码编译成为
    可以被执行的 object files ,但是这些 object files 通常还需要一些函式库之类的 link 后,才能产生一个完
    整的执行档!使用 make 就是要将原始码编译成为可以被执行的可执行文件,而这个可执行文件会放置在
    目前所在的目录之下, 尚未被安装到预定安装的目录中;
  4. make install
    通常这就是最后的安装步骤了,make 会依据 Makefile 这个文件里面关于 install 的项目,将上一个步骤所
    编译完成的数据给他安装到预定的目录中,就完成安装啦!

函数库

静态函数库

  • 扩展名:(扩展名为 .a)
    这类的函式库通常扩展名为 libxxx.a 的类型;
  • 编译行为:
    这类函式库在编译的时候会直接整合到执行程序当中,所以利用静态函式库编译成的文件会比较大一些喔;
  • 独立执行的状态:
    这类函式库最大的优点,就是编译成功的可执行文件可以独立执行,而不需要再向外部要求读取函式库的内容 (请参照动态函式库的说明)。
  • 升级难易度:
    虽然执行档可以独立执行,但因为函式库是直接整合到执行档中, 因此若函式库升级时,整个执行档必须要重新编译才能将新版的函式库整合到程序当中。 也就是说,在升级方面,只要函式库升级了,所有将此函式库纳入的程序都需要重新编译!
    动态函数库
  • 扩展名:(扩展名为 .so)
    这类函式库通常扩展名为 libxxx.so 的类型;
  • 编译行为:
    动态函式库与静态函式库的编译行为差异挺大的。 与静态函式库被整个捉到程序中不同的,动态函式库在
    编译的时候,在程序里面只有一个『指向 (Pointer)』的位置而已。也就是说,动态函式库的内容并没有被
    整合到执行档当中,而是当执行档要使用到函式库的机制时, 程序才会去读取函式库来使用。由于执行文
    件当中仅具有指向动态函式库所在的指标而已, 并不包含函式库的内容,所以他的文件会比较小一点。
  • 独立执行的状态:
    这类型的函式库所编译出来的程序不能被独立执行, 因为当我们使用到函式库的机制时,程序才会去读取
    函式库,所以函式库文件『必须要存在』才行,而且,函式库的『所在目录也不能改变』,因为我们的可执
    行文件里面仅有『指标』亦即当要取用该动态函式库时, 程序会主动去某个路径下读取,呵呵!所以动态
    函式库可不能随意移动或删除,会影响很多相依的程序软件喔!
  • 升级难易度:
    虽然这类型的执行档无法独立运作,然而由于是具有指向的功能, 所以,当函式库升级后,执行档根本不
    需要进行重新编译的行为,因为执行档会直接指向新的函式库文件 (前提是函式库新旧版本的档名相同喔!)。

yum 命令

yum [list|info|search|provides|whatprovides] 软件名
yum配置文件: /etc/yum.repos.d/CentOS-Base.repo在这里插入图片描述

  • [base]:代表软件库的名字!中括号一定要存在,里面的名称则可以随意取。但是不能有两个相同的软件库
    名称, 否则 yum 会不晓得该到哪里去找软件库相关软件列表文件。
  • name:只是说明一下这个软件库的意义而已,重要性不高!
  • mirrorlist=:列出这个软件库可以使用的镜像站,如果不想使用,可以注释到这行;
  • baseurl=:这个最重要,因为后面接的就是软件库的实际网址! mirrorlist 是由 yum 程序自行去识别镜像站, baseurl 则是指定固定的一个软件库网址!我们刚刚找到的网址放到这里来啦!修改这里可以设置镜像站
  • enable=1:就是让这个软件库被启动。如果不想启动可以使用 enable=0 喔!
  • gpgcheck=1:还记得 RPM 的数字签名吗?这就是指定是否需要查阅 RPM 文件内的数字签名!
  • gpgkey=:就是数字签名的公钥文件所在位置!使用默认值即可

RPM命令

rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。

rpm –qa其中
–a选项是查询所有已经安装的软件包。
-q是查询一个包是否安装
(显示区别:已经安装的rpm包不会显示后缀.rpm ,而未安装的包则显示后缀.rpm)

一般查询一个安装包是否安装的的命令为:
例如:rpm -qa | grep screen

rpm -qi 包名 //查看一个包的详细信息

rpm -qf 文件名 //查看一个文件是由哪个包安装的

rpm -ql 包名 //查看一个包安装了哪些文件

rpm -q 包名 //查询指定包是否安装

rpm -q --changelog 包名 //查询包的更新信息

rpm -qd 包名 //查询包相关文档

rpm -qc 包名 //查询包的相关配置文件

rpm -q --scripts 包名 //查询安装、卸载前后执行的脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值