链接
来源:互联网 发布:学做淘宝上的编辑 编辑:程序博客网 时间:2024/05/16 15:57
1, 常识:
1) static修饰的全局变量,是私有的, 只能在本模块中使用。 而不经static修饰的全局变量,是公有的, 可以在其他模块中使用。
2,
1) 节:
目标文件(*.o)用节, 来保存代码或数据。 其中需掌握的是:
.text 存放已编译的机器代码.data 存放已初始化的全局C变量.bss 存放未初始化的全局C变量,不占据实际空间, 只是个占位符.symtab (符号表) 可以理解为 .data + .bss + externP.S.:1. 关于局部变量, 在运行时保存在栈中2. 关于Extern,全局变量不能重复定义,也就是不同CPP不能用同一个命名相同的全局变量, 但是直接引用,会出“未声明的标识符”的错。所以在引用的cpp文件中,使用extern, (如extern int a) 有点像引用dll内的函数, 是吧。 其实这也告诉我们 全局变量的设置命名等必须要谨慎细心, 尤其是类似于int a (1.cpp) double a (2.cpp) 这个相当于 a1 a2 互不相关
2)静态库链接:
1)对于每个输入文件, 判断是目标文件(*.o)或是存档文件(*.a 理解为库文件,即许多目标文件组成的集合) 1.1)对于目标文件, 放入E集合, 将未定义的符号放入U(undefined)中, 定义的符号放入D中。 1.2)对于存档文件, 判断是否存在某成员目标文件对U其中一个符号@的定义, 是则将此成员目标文件放入E集合, 修改U (删去未定义符号@)D(添加定义符号@)2)反复进行以上操作, 对于不存在于E集合的存档文件中的某些成员(其实也是目标文件)简单的舍弃3)最后 合并和重定位E集合中的所有目标文件, 输出可执行性文件(如果此时发现U非空, 即仍有未定义符号,则报错)
这也折射出某种诟病, 即目标文件与库文件之间的顺序一旦出错,就会导致编译失败, 因为对于库文件而言,使用与否取决于当前的U与库文件所定义的某符号相关,过早会miss掉应该定义的符号
所以 一般的准则, 就是将未定义的放置在其定义的文件的后面, 对于“交叉”定义(即A定义了B中的某符号, B定义了A中的某符号)可以使用类似A.o B.o A.o等二次定义。
0 0
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- 链接
- Voice Over IP - Per Call Bandwidth Consumption
- HBase工程师线上工作经验总结----HBase常见问题及分析
- 面向对象的特点
- Android API,版本对照
- 努力坚持你的一万小时之旅
- 链接
- android api (82) —— InputConnection [输入法]
- 几个收藏
- Python 执行时后面加参数 在程序中获得
- Xcode的iOS项目的版本号设置
- Implement Automatic Discovery in Your Java Code with Annotations
- UVA - 10599Robots(II)(LIS)
- windbg调试内存泄漏
- DB2数据库常用命令数据库学习