linux学习21 源码软件的安装

目录

1.Tarball软件

2.软件安装与升级的方法

3.gcc简易用法

4. 用make进行宏编译

make的简单用法

5.tarball安装步骤

6.利用patch升级

7.动态函数库与静态函数库

8.ldconfig与/etc/ld.so.conf

9.程序的动态函数库解析 ldd

10.校验软件正确性


1.Tarball软件

将软件的软代码文件先以tar打包,再以压缩技术压缩成为tarball源代码文件

里面通常有源代码文件

检测程序文件

软件的简易说明与安装说明

2.软件安装与升级的方法

  • 直接以源代码通过编译来安装与升级
  • 直接以编译好的二进制程序安装与升级(红帽系列使用的RPM软件管理机制与yum在线更新模式、Debian的dpkg软件管理机制与APT在线更新模式等)

一个软件的Tarball安装流程

  1. 将Tarball由厂商网站下载
  2. 解开,得到源码文件
  3. 开始以gcc进行源代码编译
  4. 以gcc进行函数库、主、子程序的链接,以形成主要的二进制文件

3.gcc简易用法

gcc -c hello.c        自动产生.o文件,但不会产生二进制执行文件,编译时会给予最佳执行速度

gcc -O hello.c -c        自动产生.o文件,不会产生二进制文件,执行速度最佳

gcc sin.c -lm -L/lib -I/usr/include

-lm 指的是libm.so或ibm.a这个函数库文件

-L 后面接的路径是上面函数库的查找目录

-I 后面接的是源代码内的include文件所在目录

gcc -o hello hello2.c        执行文件名为hello

gcc -o hello hello.c -Wall        警告与错误都显示出来

4. 用make进行宏编译

如果不利用makefile文件,则需要每个.c文件都gcc -c ,然后在gcc -o ,当其中有一个文件修改后,除了需要对那个文件重新编译,还需要重新生成执行文件,所以需要用到make来宏编译

首先 vim 一个名为makefile的文件

main: main.o haha.o sin_value.o cos_value.o
       gcc -o main main.o haha.o sin_value.o cos_value.o -lm

第一行为每个源码文件生成的目标文件,第二行为生成执行文件

make相比较于shell脚本,优点在于:

  • 简化编译时需要执行的命令
  • 若一次编译完成后,修改了某个源码文件,make仅会对修改的文件进行重新编译
  • 最后可依照依赖性来更新执行文件

make的简单用法

目标: 目标文件1 目标文件2 ...

        gcc -o 执行文件 目标文件1 目标文件2 ...

#代表注释,命令行前必须为tab,目标需要与目标文件以“:”隔开

main: a.o b.o c.o
    gcc -o exe a.o b.o c.o -lm
clean:
    rm a.o b.o c.o

执行clean,执行main同下,或者按不同顺序执行

make clean
make clean main    #先clean,再main

由于有许多重复数据,所以可以利用变量

LIB = -lm
ABC = a.o b.o c.o
main: ${ABC}
    gcc -o exe ${ABC} ${LIB}
clean:
    rm ${ABC}

变量的基本语法:

  • 等号两边可以有空格
  • 左边不能有tab
  • 两边不能有 “:”
  • 变量最好大写
  • 变量的使用同shell
  • 环境变量可以被套用
  • 命令行模式也可以设置变量

当同一个变量在命令行与makefile内的内容不一致时

  • make 命令行后面加上的环境变量优先
  • makefile文件内的环境变量第二
  • shell原本环境变量第三

$@ 代表当前目标,所以可以将执行文件main改成$@

5.tarball安装步骤

  1. 获取原始文件:将tarball文件在/usr/local/src目录下解压缩
  2. 获取步骤流程:查看INSTALL与README文件
  3. 依赖软件安装:根据两个文件安装需要的依赖
  4. 建立makefile:以自动检测程序(config/configure)检测操作环境,并建立Makefile
  5. 编译:用make,以Makefile这个参数配置文件,根据install目标的指定来安装到正确的路径
  • ./configure 建立Makefile文件
  • make clean 移除目标文件,确保源代码包中没有残留的目标文件
  • make 根据默认设置编译生成可执行文件
  • make install 根据install的选项,将上一步编译生成的内容安装到相应目录

任何一步不成功都无法安装,且安装完成后需要手动写入man page

为了方便Tarball的管理,建议

  1. 最好将Tarball的原始数据解压缩到/usr/local/src中
  2. 安装时最好安装到/usr/local下
  3. 考虑到删除,每个软件最好单独安装到/usr/local/filename下

6.利用patch升级

patch -pn < patch_file

n为要去掉第几个路径,0为不去,1为去掉路径的第一块如/home/zjw/abc.patch则去掉/,2为去掉/home/

利用patch打完补丁后,还需要重新编译才能得到更新后的软件

patch -R < patch_file        可用来还原文件

7.动态函数库与静态函数库

静态函数库特点:

  • 扩展名通常为libxx.a
  • 这类函数库在编译时会直接整合到执行程序当中,所以利用静态函数库编译成的文件会比较大
  • 编译成功的可执行文件可以独立运行,不需要再向外部要求读取函数库内容
  • 只要函数库升级了,所有使用此函数库的程序都需要重新编译

动态函数库特点:

  • 扩展名通常为libxx.so
  • 程序中的指针指向动态函数库,当执行文件需要用到函数库功能时,程序才会读取函数库来使用
  • 用这类函数库编译出来的程序不能独立运行,且函数库所在目录也不能变化,所以动态函数库不可随意移动删除
  • 函数库升级后,程序不需要重新编译

8.ldconfig与/etc/ld.so.conf

用于协助将动态函数库加载到内存中

首先须要在/etc/ld.so.conf中写入动态函数库所在目录,然后利用ldconfig将/etc/ld.so.conf中的数据读入缓存

ldconfig [-f conf] [-C cache]

ldconfig [-p]

-f conf 使用conf(某个文件)作为函数库的获取路径,而不是/etc/ld.so.conf

-C cache 使用cache(某个文件)作为高速缓存的函数库数据,而不是/etc/ld.so.cache

-p 列出目前有的所有函数库数据

由于/etc/ld.so.conf中已经写入了/etc/ld.so.conf.d目录,所以若想自己添加函数库,可在/etc/ld.so.conf.d目录中添加文件,文件内容写入动态函数库路径

如 /etc/ld.so.conf.d/filename.conf

9.程序的动态函数库解析 ldd

若想知道某个二进制可执行文件含有哪些动态函数库,可用ldd命令

ldd [-vdr] [filename]

-v 列出所有信息内容

-d 重新将数据有遗失的链接点显示出来

-r 将ELF有关的错误内容显示出来

10.校验软件正确性

使用广泛的md5sum sha1sum sha256sum

首先在官网查看算法数据,再用相应的命令检查下载下来的文件的校验值是否与官网一致

md5sum [-bct] filename

-b 使用二进制文件的读取方式,默认使用windows/dos文件格式的读取方式

-c 检验文件的校验值

-t 以文本方式来读取文件校验值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值