1. Linux 应用程序表现为两种特殊类型的文件:可执行文件和脚本文件。可执行文件是计算机可以直接运行的程序;脚本文件是一组指令的集合,将由另一个程序(解释器)来执行。在用户级别,这两者本质上没有不同。
2. 存储系统程序的标准路径:
/bin:二进制文件目录,用于存放启动系统时用到的二进制文件。
/usr/bin:用户二进制文件目录,用于存放用户使用的标准程序。
/usr/local/bin:本地二进制文件目录,用于存放特定软件安装的程序。
/sbin和/usr/sbin:系统管理员二进制文件目录。
/opt:可选的操作系统组件和第三方应用程序安装目录。
安装程序可以通过用户安装脚本将路径添加到你的 PATH 环境变量中。
其他一些功能特性和编程系统都可能有自己的目录结构和程序目录。其中最主要的就是X视窗系统,它通常安装在/usr/X11目录下。gcc一般位于 /usr/bin 或/usr/local/bin 目录中,但它会从其他位置运行各种编译器支持的应用程序。这个位置是在编译编译器本身时指定的,并且随主机类型的不同而不同。对于linux系统来说,这个位置可能是/usr/lib/gcc-lib/目录下的一个版本特定的子目录。GNU C/C++ 编译器的各个工具和 GNU 专用的头文件都保存在这里。
3. 系统管理员一般喜欢使用 /usr/local 目录,因为它分离了厂商提供及后续添加的文件与系统本身提供的应用程序。保持/usr目录的这种组织方法的好处是:当你需要升级操作系统时,只需保留目录/usr/local里的内容。建议在/usr/local 目录结构下编译、运行自己的程序,并访问必需的文件。
4. 头文件用来提供对常量的定义和对系统及库函数调用的声明。对于 C 语言来说,这些都文件基本上都在/usr/include目录及其子目录下。其他编程系统也有各自的include文件,并将其存储在可被相应编译器自动搜索到的目录里。例如,X 视窗系统的 /usr/include/X11 目录和 GNU C++ 的/usr/include/g++ 目录。
5. 调用 C 语言编译器时,我们可以使用 -I (大写 i )标志来包含保存在子目录或非标准位置中的 include 文件。
$ gcc -I/usr/openwin/include fred.c
它指示编译器不仅在标准位置,也在 /usr/openwin/include 目录中查找 fred.c 中包含的头文件。请参看 C 语言编译器的使用手册 (man gcc)以了解更多细节。
6. 用 grep 命令来搜索包含某些特定定义和函数原型的头文件是很方便的。直接切换到文件目录中,grep 要搜索的字符串 文件名,就可以在文件中查找到有该字符串的行。
7. 库是一组预先编译好的函数的集合,这些函数都是按照可重用原则编写的。通常由一组相互关联的函数组成并执行某项常见的任务。如屏幕处理函数库(curses 和 ncurses库 )和数据库访问例程(dbm库)。系统标准库文件一般存储在 /lib 和/usr/lib 目录中。C 语言编译器(或更确切地说是链接程序)需要知道要搜索哪些库文件,默认情况下,它只搜索标准 C 语言库。
8. 仅把库文件放在标准目录中,然后希望编译器找到它是不够的,库文件必须遵守特定的命名规范并且需要在命令行中明确指定。
.a 代表传统的静态函数库。
.so 代表共享函数库(动态函数库) 。
9. 函数库通常以静态库和共享库两种格式存在,可用ls /usr/llib 命令查看。我们可以通过给出完整的路径名或用 -l 标志来指示编译器要搜索的库文件。虽然库文件和头文件一样,通常都保存在标准位置,我们也可以通过-L 标志为编译器增加库的搜索路径。
10. 创建静态库很简单,只要使用 ar (代表archive,即建立归档文件)程序。可以使用 nm 命令查看目标文件、函数库或可执行文件里包含的函数。
11. 静态库的一个缺点是,当我们同时运行许多应用程序并且它们都使用来自同一个函数库的函数时,就会在内存中有同一函数的对分拷贝,在程序文件自身也有多分同样的拷贝。这将消耗大量内存和磁盘空间。
12. 程序使用共享库时,它的连接方式是这样的:它本身不再包含函数代码,而是引用运行时可访问的共享代码。当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如果有必要共享库才被加载到内存中。通过这种方法,系统可只保留共享库的一份拷贝并供许多应用程序同时使用,并且在磁盘上也仅保存一份。另一个好处是共享库的更新可以独立于依赖它的应用程序。
声明:
本文为 iddmx 对《Beginning Linux Programming》(Third Edition) Chapter 1 的读书笔记。内容大部分都是书中内容,也有一些个人理解,由于 iddmx 水平有限,书中许多精华没能提取出来,如果想要深入了解,请阅读原书。
本文欢迎自由转载,但请务必保持本文完整或注明来之本文。本文未经 iddmx 同意,不得用于商业用途。最后,如果您能从这个简单文档里获得些许帮助,iddmx 将对自己的一点努力感到非常高兴;iddmx 水平有限,如果本文中包含的错误给您造成了不便,iddmx 在此提前说声抱歉,并希望您能j将错误告知 iddmx([email protected]),以便修正。
祝身体健康,工作顺利。☺