目录
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安装流程
- 将Tarball由厂商 站下载
- 解开,得到源码文件
- 开始以gcc进行源代码编译
- 以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的文件
第一行为每个源码文件生成的目标文件,第二行为生成执行文件
make相比较于shell脚本,优点在于:
- 简化编译时需要执行的命令
- 若一次编译完成后,修改了某个源码文件,make仅会对修改的文件进行重新编译
- 最后可依照依赖性来更新执行文件
make的简单用法
目标: 目标文件1 目标文件2 …
gcc -o 执行文件 目标文件1 目标文件2 …
#代表注释,命令行前必须为tab,目标需要与目标文件以“:”隔开
执行clean,执行main同下,或者按不同顺序执行
由于有许多重复数据,所以可以利用变量
变量的基本语法:
- 等 两边可以有空格
- 左边不能有tab
- 两边不能有 “:”
- 变量最好大写
- 变量的使用同shell
- 环境变量可以被套用
- 命令行模式也可以设置变量
当同一个变量在命令行与makefile内的内容不一致时
- make 命令行后面加上的环境变量优先
- makefile文件内的环境变量第二
- shell原本环境变量第三
$@ 代表当前目标,所以可以将执行文件main改成$@
5.tarball安装步骤
- 获取原始文件:将tarball文件在/usr/local/src目录下解压缩
- 获取步骤流程:查看INSTALL与README文件
- 依赖软件安装:根据两个文件安装需要的依赖
- 建立makefile:以自动检测程序(config/configure)检测操作环境,并建立Makefile
- 编译:用make,以Makefile这个参数配置文件,根据install目标的指定来安装到正确的路径
- ./configure 建立Makefile文件
- make clean 移除目标文件,确保源代码包中没有残留的目标文件
- make 根据默认设置编译生成可执行文件
- make install 根据install的选项,将上一步编译生成的内容安装到相应目录
任何一步不成功都无法安装,且安装完成后需要手动写入man page
为了方便Tarball的管理,建议
- 最好将Tarball的原始数据解压缩到/usr/local/src中
- 安装时最好安装到/usr/local下
- 考虑到删除,每个软件最好单独安装到/usr/local/filename下
6.利用patch升级
patch -pn
n为要去掉第几个路径,0为不去,1为去掉路径的第一块如/home/zjw/abc.patch则去掉/,2为去掉/home/
利用patch打完补丁后,还需要重新编译才能得到更新后的软件
patch -R
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 以文本方式来读取文件校验值
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24754 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!