1.linux下C程序的原始码通常以c作为后缀(cpp是C++的后缀,gcc会根据后缀来加载不同的链接库,详见:http://7613577.blog.51cto.com/7603577/1605240)。

2.程序编译的几个相关概念:

1)源码:程序代码,人类可以看得懂的程序语言

2)编译程序:源码编译后的机器可以看得懂的代码,通常以o作为后缀

3)可执行文件:经过编译程序编程二进制程序后,机器看得懂的可执行的档案。

3.make相关介绍:

1)make指令执行后,会去找Makefile,通常软件开发商都会写一支侦测程序来侦测用户的作业环境,以及该作业环境是否有软件开发商所需要的其他功能,该侦测程序侦测完毕后,就会主动的建立这个Makefile的规则档案,通常这支侦测程序的文件名为configure或者config

2)侦测程序要侦测的内容有:

是否有适合的编译程序可以编译软件的程序代码

是否已经存在本软件所需要的函式库,或其他的相依软件

操作系统平台是否适合本软件,包括linux的核心版本

核心表头定义档是否存在(驱动必须要的侦测)

3)同一款软件在不同的平台上安装需要重新编译。

4.gcc [-cO] [-l函式库] [-L/函式库目录][Ipath] [-Wall] [-o targetfile] sourcefile:编译程序,选项,

1)-c:编译程序,生成*.o文件

2)-o:链接程序,产生可执行的文件,此时需要指定要生成的文件.

3)-O:可以优化程序,提高性能

4)-Wall:产生详细的编译信息

5)-l:加入某个函式库,m代表libm.so这个动态链接库

6)-L:后接路径,表示函式库要从哪里去查找。

7)-I:后接include要查找的目录

5.#include<stdio.h>:这句话的意思是将一些定义的数据由stdio.h这个档案读入,这包括printf的相关设定,这个档案其实是放在/usr/include/stdio.h的。

6.make指令的优点:

1)简化编译时所需要下达的指令

2)若在编译完成之后,修改某个原始码档案,则make仅会针对被修改了的档案进行编译,其他的Object file不会被更动。

3)最后可以依照相依性来更新执行档。

7.makefile解读:

1)基本格式:

target:目标文件1 目标文件2 

<tab> gcc -o 欲建立的执行文件 目标文件1 目标文件2 

2)target是我们要建立的信息,而且目标文件就是具有相关性的object files,那建立执行文件语法就是以<tab>按键开头的那一行,命令行必须要以tab按键作为开头才行

3)makefile中用#代表注释,<tab>必须在命令行的第一个字符,target与相依档案(目标文件)之间以:隔开。

8.makefile中变量的基本语法:

1)变量与变量内容以=隔开,同时两边可以具有空格

2)变量左边不可以具有<tab>

3)变量与变量内容在=两边不能具有:

4)在习惯上,变量最好以大写字母为主

5)运用变量时,以${变量}或$(变量)使用

6)在该shell的环境变量可以被套用,例如CFLAGS。

7)在指令模式也可以给予变量

9.当CFLAGS的内容指令列与makefile里面并不相同时,取舍关系如下:

1)make指令列后面加上的环境变量为优先

2)makefile里面指定的环境变量第二

3)shell原本的环境变量第三。

10.一些特殊变量:$@代表目前的target。

11.tarball(压缩包)软件一般的安装方式:

1)./configure:这个步骤是建立Makefile这个档案,通常程序开发者会写一支scripts来检查linux系统,相关的软件属性等,经过侦测后,生成一个与本地环境适应的Makefile文件。

2)make clean:清除旧的编译文件(*.o)

3)make:依据Makefile当中的预设进行编译行为。即将原始码编译为可执行的文件,而这个可执行文件会放置在目前所在的目录下,尚未被安装到预定的目录下。

4)make install:依据Makefile这个档案关于install的项目,将上一个步骤产生的编译完成的数据安装到预定的目录中。

12.动态与静态函式库

1)静态函式库:扩展名为.a,这类函式库在编译的时候会直接整合到执行程序当中,所以一般该方式生成的可执行文件会比较大些。另外这类函式库的最大优点就是可以独立运行,不依赖于其他函式库。但升级难度较大。

2)动态函式库:扩展名.so,这类函式库当执行档要使用到函式库的机制时,程序才会读取函式库来使用,因此生成的文件会小一点。由于是动态读取,因此该模式的函式库独立性较差,不过升级比较容易。

13.将动态函式库加载到高速缓存中可以提高函式库的存取效能,具体步骤为:

1)首先,我们必须要在/etc/ld.so.conf里面写下想要读入告诉缓存当中的动态函式库所在的目录(不是档案)。

2)家下来则是利用ldconfig这个执行档将/etc/ld.so.conf的资料读入缓存当中。

3)同时也将数据记录一份在/etc/ld.so.cache这个档案中。

14.ldconfig [-f config] [-C cache] [-p]:将动态函数库预先载入内存,参数:

1)-f:指定library函数库的路径(文件),默认是/etc/ld.so.conf

2)-C cache:指定cache的内容(文件名),默认/et/ld.so.cache

3)-p:列出目前所有函数库资料内容(在/etc/ld.so.cache内的内容)

2.ldd [-vdr] [filename]:程序的动态函数库解析,参数,

1)-v:列出所有内容信息

2)-d:重新将资料有遗失的link点显示出来

3)-r:将ELF有关的错误显示出来

3.md5sum/sha1sum [-bct] filename;md5sum/sha1sum [--status|--warn] --check filename:一种软件安装加密技术,参数,

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

2)-c:检验档案指纹

3)-t:以文字形式来读取档案指纹。