《C专家编程》学习笔记(对链接的思考)
2014-06-24 09:46
274 查看
注意:以下说明都是针对SRV4系统而言的。
一、编译器
1、组成
1)、预处理器
2)、语法和语义检查器(前端)
3)、代码生成器(后端)
4)、优化器
5)、汇编程序
6)、连接-载入器
2、使用
1)、-#选项查看编译过程的各个独立阶段。
2)、-V选项能提供版本信息
3)、-W选项向各个阶段传递选项信息。
a、W后面跟一个字符(表示那个阶段),一个逗号,然后就是具体的选项。
例:cc -W1, -m main.c > main.linker.map
4)、-M选项传递给链接载入器,要求它产生连接器映象。
二、动态与静态链接
1、动态链接:执行文件只是包含了文件名,让载入器在运行时能够寻找程序所在的函数库。
2、静态链接:函数的一份拷贝是可执行文件的物理组成部分。
3、动态链接的优点
1)、动态链接可执行文件比功能相同的静态链接可执行文件体积小。
2)、提供了更好的I/O和交换空间率,节省了物理内存,提高了系统的整体性能。
3)、动态链接是函数库的版本升级更为容易。
4)、动态链接允许用户在运行是选择需要执行的函数库,使提高速度或提高内存使用效率或包含额外的调试信息而创建新版本函数库是完全可能的。
注意:所以的应用程序都使用动态链接。
4、ABI(应用程序二进制接口)
1)、ABI优点:使软件不必因为新版本函数库或操作系统的发布而重新连接且能提高系统的总体性能。
三、函数库链接的秘密
1、动态库文件的扩展名是“.so”,而静态库文件名是“.a”
2、传给C编译器的命令行参数里并没有提到函数的完整路径名。他甚至没有提到在函数库目录中该文件的完整名字。
3、编译器期望在确定的目录找到库。
4、观察头文件,确认所使用的函数库。
1)、头文件的名字通常并不与它所对应的函数库名相似。
2)、函数库包含许多函数的定义,但这些函数的原型声明却散布于多个头文件中。
5、与提取动态库中的符号相比,静态库中的符号提取方法限制更严。
注意:始终将-1函数库选项放在编译命令行的最右边。
四、警惕Interpositioning
1、定义:通过编写与库函数同名的函数来代替库函数的行为。
2、C保留字不应该出现在自己程序的声明中。(P104-106表5-2)
注意:不要让程序中的任何符号成为全局的,除非有意把他们作为程序的接口之一。
五、产生链接报告文件。
一、编译器
1、组成
1)、预处理器
2)、语法和语义检查器(前端)
3)、代码生成器(后端)
4)、优化器
5)、汇编程序
6)、连接-载入器
2、使用
1)、-#选项查看编译过程的各个独立阶段。
2)、-V选项能提供版本信息
3)、-W选项向各个阶段传递选项信息。
a、W后面跟一个字符(表示那个阶段),一个逗号,然后就是具体的选项。
例:cc -W1, -m main.c > main.linker.map
4)、-M选项传递给链接载入器,要求它产生连接器映象。
二、动态与静态链接
1、动态链接:执行文件只是包含了文件名,让载入器在运行时能够寻找程序所在的函数库。
2、静态链接:函数的一份拷贝是可执行文件的物理组成部分。
3、动态链接的优点
1)、动态链接可执行文件比功能相同的静态链接可执行文件体积小。
2)、提供了更好的I/O和交换空间率,节省了物理内存,提高了系统的整体性能。
3)、动态链接是函数库的版本升级更为容易。
4)、动态链接允许用户在运行是选择需要执行的函数库,使提高速度或提高内存使用效率或包含额外的调试信息而创建新版本函数库是完全可能的。
注意:所以的应用程序都使用动态链接。
4、ABI(应用程序二进制接口)
1)、ABI优点:使软件不必因为新版本函数库或操作系统的发布而重新连接且能提高系统的总体性能。
三、函数库链接的秘密
1、动态库文件的扩展名是“.so”,而静态库文件名是“.a”
2、传给C编译器的命令行参数里并没有提到函数的完整路径名。他甚至没有提到在函数库目录中该文件的完整名字。
3、编译器期望在确定的目录找到库。
4、观察头文件,确认所使用的函数库。
1)、头文件的名字通常并不与它所对应的函数库名相似。
2)、函数库包含许多函数的定义,但这些函数的原型声明却散布于多个头文件中。
5、与提取动态库中的符号相比,静态库中的符号提取方法限制更严。
注意:始终将-1函数库选项放在编译命令行的最右边。
四、警惕Interpositioning
1、定义:通过编写与库函数同名的函数来代替库函数的行为。
2、C保留字不应该出现在自己程序的声明中。(P104-106表5-2)
注意:不要让程序中的任何符号成为全局的,除非有意把他们作为程序的接口之一。
五、产生链接报告文件。
相关文章推荐
- 《C专家编程》:对链接和函数库的思考(五)
- 《C专家编程》学习笔记(对内存的思考)
- 《C专家编程》学习笔记——第三章(二):关于联合
- 关于6.828实验中的bootloader链接地址与加载地址的思考
- 《C专家编程》学习笔记--位段结构
- C语言——链接的思考
- 读书笔记c专家第5章对链接的思考
- JAVA高级视频_IO输入与输出 思考与练习 学习笔记
- TCP长连接的思考和相关问题的实验_百万链接数测试_百万链接内核参数的调整
- wordpress评论链接转跳的一些思考:判断链接来源的合法性
- 《C专家编程》学习笔记1
- 【C专家编程】第5章 对链接的思考
- 《c专家编程》学习笔记(二)
- 《C专家编程》学习笔记1
- 《C专家编程》学习笔记(分析C语言的声明)
- 《C专家编程》学习笔记(令人震撼的事实:数组和指针并不相同)
- 算法导论 第18章 思考题18-2 2-3-4树的链接与分裂,推广至B树
- 《c专家编程》学习笔记
- 《C专家编程》学习笔记(运动的诗章:运行时的数据结构)
- 《C专家编程》学习笔记(为什么程序员无法分清万圣节和圣诞节)