源代码为文本文件,需要经过编译器编译之后,变成可执行的文件,在编译过程中,由于源代码比较大, 有时需要分成几个部分来进行编译成目标文件,之后将各个部分的编译成一个可执行文件,gcc编译器为Linux标准的编译器。
编译步骤:1.gcc –c hello.c 自动产生hello.o的文件,但不会产生二进制执行文件。
2.gcc -o hello hello.c 参数后面跟为生成的二进制的执行文件的名字。
加入函数进行编译 3. gcc sin.c –lm -L /lib -I/usr/include –lm指的是libm.so或libm.a
-L 后面接的路径是函数库的搜索目录,-I 后面接的是源码内包含文件的所在目录。
函数库有两种分别为动态函数库以及静态函数库,动态函数库的后缀即为.so文件,.a则表示静态函数库。当利用动态函数库进行编译的时候,没办法将全部函数都编译进去,只是给了一个指针型的指向,如果函数库升级了,不需要重新编译生成可执行文件,而静态函数库则需要重新编译。
Linux中的函数库默认放在/lib以及/usr/lib文件夹中,因此当编译的时候若没有放在这两个函数库中,则默认连接到这两个文件夹中。
Tarball安装的基本步骤:
1. 将tarball文件在/usr/local/src目录下解压缩;tar –zxvf 具体tarball
2. 查看安装文档
3. 运行.configure命令检查系统环境,建立makefile文件。
4. Make编译成可执行二进制文件,Make install安装程序。
使用patch更新源代码,首先利用diff –Naur 旧文件 新文件 >oncomparion 比较出新旧文件的不同,生成一个需要补丁的新旧对比文件。然后在到旧的文件目录下去执行patch –p 0 <oncomparion ,就可以将旧的文件替换成新文件。
为了提高库的访问速度,则可以将库文件调入到内存当中。首先将库的目录写入在/etc/ld.so.conf中写入动态链接库的目录,利用ldconfig命令来调用动态库中。Ldd命令可以查看所用到的执行文件所用到的函数库。
通常建议将安装的套件放在/usr/local上,源码放在/usr/local/src上,默认情况下,man会去搜索/usr/local/man里面的帮助文件。/etc/man.config文件记录man page的搜索路径,当安装的套件独立在一个文件夹中,这么man page没有放在特定的目录下,就没办法查询到,因此需要将路径记录在man.config中。
由于RPM有数据库来记录套件相关的信息,所以RPM类型的套件所拥有的文件都放在系统默认设置的目录下。RPM安装的是直接编译好的可执行文件,因此系统环境应该是一样的,RPM存在的最大问题是无法自动满足套件的依赖属性的需求,可以利用yum、apt、urpmi服务来解决属性的相关问题,RPM的数据库放在/var/lib/rpm的文件目录下。
RPM:-ivh 具体的rpm包,可以查看具体安装包的过程。
-Uvh RPM包的升级。
-qR 查看套件的依赖关系。
RPM卸载要自上而下,rpm –e 具体套件名称 解安装这个套件。
Man查询的结果是在程序外,help查询的结果是在程序里,这个是内嵌到程序里的参数。
RPM类型的文件放在系统默认设置的文件夹下(如下)
目录
说明
/etc
一些配置文件
/usr/bin
一些可执行文件
/usr/lib
一些程序使用的动态函数库
/usr/share/doc
基本的软件使用手册与帮助文件
/usr/share/man
一些man page文件
SRPM
Source RPM该类型的文件与RPM的区别在于安装包里携带的是源代码,而RPM则是可执行的二进制文件,因此SRPM需要进行重新的编译成二进制文件。SRPM与tarball的区别是:SRPM包含依赖的关系,而tarball则不含有。
SRPM的目录
目录
说明
/usr/src/redhat/spec
存放将SRPM编译为RPM的配置文件
/usr/src/redhat/build
存放编译过程中的东西
/usr/src/redhat/source
存放原始文件
/usr/src/redhat/RPMS
存放编译后的RPMS包