linux下的动态链接库(DLL)

一、公约

1. 库的命名习惯

一个linux DLL 有三个不同名字的文件组成

soname 文件

lib + 链接库名字 + .so + .版本号

每当链接库接口改变时都递增版本号。soname 文件其实只是一个符号链接而已,指向他的real name 文件。

real name 文件

lib + 链接库名字 + .so + .版本号.次版本号.发行号

发行号是可选的。该文件包含实际代码。

linker name 文件

lib + 链接库名字 + .so

编译器以这个名字来请求指定的链接库。

volatile and restrict type qualifiers

C89 标准委员会为 C 添加了两个限定词,const 和 volatile。C99 委员会添加了第三个 restrict 限定词。这三个限定词以及他们的结合决定了当编译器通过一个左值( lvalue,暂且翻译成左值 )访问一个对象时所做的一些假设。左值就是即可以出现在赋值语句左边也可以是右边的对象。

const 的语法和语义是从 C++ 那里改编来的,const 这个概念在许多其他语言里都有。volatile 和 restrict 是委员会的发明,两者都遵从 const 的语法模式。

类型限定词的作用是控制对代码的优化。有几项重要的优化技术是建立在缓冲原理之上的:在某些情况下,编译器可以使用寄存器保存最近一次通过地址访问的值,并且当再次访问同一地址时使用这个记住的值( CPU 寄存器或高速缓冲是典型的硬件寄存器)。如果使用寄存器而不是外部的存储器,代码可以变得更小更快。





如何得到 GCC 编译时各阶段的结果

1.预处理

-E

2.词法、语法分析

-fdump-translation-unit
可以使用-address,-all,-slim后缀

3.中间代码生成

-fdump-tree-original
得到优化前的中间代码
-fdump-tree-optimized
得到优化后的中间代码
-fdump-tree-inlined
内联函数是在生成中间代码时处理的,并且你可以通过该选项查看

以上3个参数也可以使用-address,-all,-slim后缀

4.汇编代码

-S

如何创建 deb 软件包

摘录自 creating and distributing deb files written by Andrew Min

创建一个 deb 软件包有多种方式:

1. 使用 CheckInstall
asic-linux.com.mx/~izto/checkinstall/
最简单也是最糟糕的一种方式。你要做就是运行 make 编译源代码,然后运行 checkinstall 创建 deb 软件包。但是这种方式不会安装依赖也不允许你声明依赖。所以用户必须手动安装依赖。
AutoApt%nbsp%nbsp help.ubuntu.com/community/AutoApt
和 AutoDeb%nbsp%nbsp wiki.ubuntu.com/AutoDeb
可能可以解决依赖问题,但他们现在还是带有实验性质的。
关于 checkinstall 的教程:
help.ubuntu.com/community/CheckInstall

2. 使用 Debian Package Tools FE
url.fullcirclemagazine.org/927dc1
一个基于 Qt 的带界面的工具,比 checkinstall 好,但也不是很理想。

3. 手动创建软件包