Linux开发系统导引

2020-06-30 作者: 稳场硬派

对Linux开发人员来说,了解软件工具和开发资源在系统中存放的位置是很重要的

1.应用程序

应用程序通常存放在系统为之保留的特定目录中。
系统为正常使用提供的程序,包括用于程序开发的工具,都可在目录/usr/bin中找到;系统管理员为某个特定的主机或本地网络添加的程序通常可在目录/usr/local/bin或/opt中找到。

系统管理员一般喜欢使用/opt和/usr/local目录,因为它们分离了厂商提供及后续添加的文件与系统本身提供的应用程序。一直保持以这种方式组织文件的好处在你需要升级操作系统时就可以看出来了,因为只有目录/opt和/usr/local里的内容需要保留。我们建议对于系统级的应用程序,你可以将它放在/usr/local目录中来运行和访问所需的文件。对于开发用和个人的应用程序,最好在你的家目录中使用一个文件夹来存放它。

2.头文件

用C语言及其他语言进行程序设计时,你需要用头文件来提供对常量的定义和对系统函数及库函数调用的声明。对C语言来说,这些头文件几乎总是位于/usr/include目录及其子目录中。那些依赖于特定Linux版本的头文件通常可在目录/usr/include/sys和/usr/include/linux中找到。

其他编程系统也有各自的头文件,这些头文件被存储在可被相应编译器自动搜索到的目录里。例如,X视窗系统的/usr/include/Xll目录和GNU C++的/usr/include/c++目录。

3.库文件

库是一组预先编译好的函数的集合,它们通常由一组相互关联的函数组成以执行某项常见的任务,以达到可以重复使用的目的。

标准系统库文件一般存储在/lib和/usr/lib目录中。C语言编译器(或更确切地说是链接程序)需要知道要搜索哪些库文件,因为在默认情况下,它只搜索标准C语言库。仅把库文件放在标准目录中,就希望编译器能够找到它是不够的,库文件必须遵循特定的命名规范并且需要在命令行中明确指定。库文件的名字总是以lib开头,随后的部分指明这是什么库。文件名的最后部分以.开始,然后给出库文件的类型:

□ .a代表传统的静态函数库;
□ .so代表共享函数库。

4.静态库

函数库最简单的形式是一组处于“准备好使用”状态的目标文件。当程序需要使用函数库中的某个函数时,它包含一个声明该函数的头文件。编译器和链接器负责将程序代码和函数库结合在一起以组成一个单独的可执行文件。
静态库,也称作归档文件(archive),按惯例它们的文件名都以.a结尾。比如,标准C语言函数库/usr/lib/libc.a。

5.共享库

静态库的一个缺点是,当你同时运行多个应用程序并且它们都使用来自同一个函数库的函数时,内存中就会有同一函数的多份副本,而且在程序文件中也有多份同样的副本。这将消耗大量内存和磁盘空间。共享库的保存位置与静态库是一样的,但共享库有不同的文件名后缀。在一个典型的Linux系统中,标准数学库的共享版本是/usr/lib/libc.so。当一个程序使用共享库时,它的链接方式是这样的:程序本身不再包含函数代码,而是引用运行时可访问的共享代码。当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如果有必要,共享库才被加载到内存中。通过这种方法,系统可以只保留共享库的一份副本供许多应用程序同时使用,并且在磁盘上也仅保存一份。另一个好处是共享库的更新可以独立于依赖它的应用程序。