很久之前就买了图灵程序设计丛书的Linux程序设计(第三版),白天忙活乱七八糟的事,只有晚上睡前能看一会,导致之前看过的记忆不深,所以决心坚持写这个学习笔记系列博客!希望大家督促我!呵呵,互相学习,共同进步!坚信:坚持是成功的唯一途径!
第 一 章 入门
1.1 讲了一些linux历史啊、GNU项目的介绍啊等那些,没啥好记录的。
1.2 还是有些需要记录的
PATH变量里用冒号“:”分割条目,windows变量里用分号“;”分隔条目。
如果在使用gcc编译器时,没用-o name 选项指定可执行程序存放的文件,则会自动存放在一个叫a.out的文件里。
头文件:对于C语言来说,这些头文件几乎总是在/usr/include目录中。那些依赖于特定Linux版本的头文件通常在/usr/include/sys和/usr/include/linux中找到。 编译器会自动搜索相应的目录去查找头文件,也可以调用c语言编译器时用-I标志来包含非标准位置的include文件。如:$ gcc -I /usr/openwin/include mysource.c 他指示编译器不仅在标准位置也在/usr/openwin/include目录中查找mysource.c中的头文件
库文件:库是一组预先编译好的函数集合,都是按照可重用原则编写的。一般存贮在/lib和/usr/lib中。由于之前计算机运行速度比较慢,cpu周期比较昂贵,所以要求库文件必须放在标准目录中,同时对命名也有要求,方便查找。库文件的名字总是以lib开头。.a代表传统的静态链接库;.so代表动态链接库。当然也可以在编译的时候给出完整的路径名来指示编译器要搜索的库文件,例如:$ gcc -o myexe mysource.c /usr/lib/libm.a 。或者用-l标志指示 如:gcc -o myexe mysource.c -lm 。-lm(lm之间没有空格)是简写方法。代表的是标准库目录中名为libm.a的数学函数库。也可以用户-L选项来增加库的搜索目录。如:gcc -o myexe -L/usr/mylib mysource.c。
静态库也称为归档文件(archive),我们可以建立自己的静态库文件,用到ar 工具和gcc -c 命令对函数进行编译。 具体例子看书上P8。注意 最后会用到 runlib 命令来处理一下(为了生成函数表)。通常情况下,库中会有很多函数,但应用程序只将他自己用到的函数编译进来。可以用nm命令查看目标文件、函数库、可执行程序里的函数来验证上面的结论。
共享库 静态库的不足是,当我们运行的多个程序都用到静态库中的某一函数时,内存中就会有同一个函数的多份拷贝,程序文件里也有多份拷贝,浪费了内存和磁盘。负责装载共享库并解析客户程序函数引用的程序是ld.so(动态装载器)。搜索共享库的配置文件在/etc/ld.so.conf中。可以用ldd命令来查看程序需要哪些共享库。