这一章主要讲了一些Linux的历史,编程需要的工具还有,静态库和共享库。
个人觉得这章可以归纳为一下几点:
1.文本编辑器;vim(这是现阶段大多数自带的很强大的文本编辑器)
vim test.c(创建一个test.c的文件)
gcc -o test test.c(将test.c生成为 test可执行文件)
注意:如果我们没有 指定生成文件的名字将自动命名为a.out(assemler output的意思)。
如果我们编译时需要用到非标准的头文件(通常是/user/include)或者是标准目录的子目录中的,应该用 -I来包含头文件。
2.接下来是关于静态库(.a)和共享库(.so)。
库文件,就是一些已经编译好的按照可重用的原则编写的函数集合,后面我们会学到的(curses和dbm就是一个很好的例子
在编译时使用库函数有以下几种方式:
①:gcc -o test test.c /usr/lib/libm.a
②: gcc -o test test,c -lm(libm.a的缩写,liba就写成-la以此类推)
以上两种是库文件在标准目录下才会用的。
③:gcc -o test -L/usr/openwin/lib test.c -lx11
-L后接库文件所在的目录
关于静态库的生成,看一下例子就可以理解了:
首先我们定义两个基本的源文件:coutnum.c,coutchar.c
gcc -c coutnum.c coutchar.c
将生成两个文件(coutnum.o和coutchar.o)
其中的-c是告诉编译器不要生成真正的可执行程序因为我们现在还没有main函数
.o是一种包含在库文件的目标文件
vim lib.h(生成一个头文件用来声明库中所定义的函数,如果要使用库中的函数就必须包含这个头文件)
然后我们用:
ar crv libfoo,a coutchar.o coutnum.o
使用ar命令来创建.a文件这里 crv 的意义大家可以自己查询关于ar这个命令的资料
另外有些系统我们必须在创建一个库文件之后生成一个内容表
ranlib libfoo,a
静态库有一个缺点:当同时运行多个程序,而这些程序又使用库的同一函数时,就会在内存存在很多副本,这将会浪费大量的内存和磁盘空间所以用到了共享库(.so)
同时共享库的另一个优点:使得共享库能独立于应用程序的更新(共享库的格式:.so.N其中N代表着他的版本)
关于创建共享库的过程:
http://blog.csdn.net/mindview/article/details/2045096
可以看看这个,有了静态库的讲解,这个应该不难