Obj文件以及Linker&Loader
来源:互联网 发布:贴面膜后要洗脸吗 知乎 编辑:程序博客网 时间:2024/05/01 14:55
Obj文件是非PE格式的二进制文件,
以前源代码的交付(或销售)形式即通过obj文件.
在gcc中通过 gcc -o , 在vc中通过cl.exe 就可以生成.
每个cpp或者c源文件生成一个obj文件.
里面的内容如下:
1, OBJECT FILE HEADER
描述文件内部其他部分(下面列举的)的位置和大小.
2, TEXT SEGMENT
汇编指令
3, DATA SEGAMENT
数据(二进制形式)
4, RELOCATION INFOMATION
根据绝对地址可以获取指令和数据位置
5, SYMBOL TABLE
做过plx吗? 做过, ok, 这个就是大名鼎鼎的symbol table,
里面主要有symbol和其address.其他包含了external label和unresolved references(都是link时搞定,编译出现link error常因为这里出错哦^_^)
6, DEBUG INFOMATION
调试信息, 看到vc的强大debug没! 这个就不废话了.
生成一个可执行文件的过程:
a.cpp->a.obj
b.cpp0->b.obj
main.cpp->main.obj
=======================cl.exe
link ***(link参数, 如subsystem等) a.obj b.obj main.obj
---->main.exe
Linker的一个重要工作就是去找library. 比如链接STL和user or system library等.
双击main.exe就可以load了^_^. load又是一个复杂的过程. 如果常用gcc和写makefile, 应该会对compile和link有比较好的认识. :)
//补充: from msdn:
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_.2f.z7.2c_2f.zd.2c_2f.zi.asp
编译器将程序数据库命名为 project.pdb。如果编译文件但没有项目,编译器将创建名为 VCx0.pdb. 的数据库,其中 x 是所使用的 Visual C++ 的主版本。编译器将 PDB 的名称嵌入每个使用此选项创建的 .obj 文件中,从而使调试器了解符号和行号信息的位置。当使用此选项时,.obj 文件将较小,因为调试信息存储在 .pdb 文件中而不是 .obj 文件中。
如果从使用此选项编译的对象创建库,则在将库链接到程序时,关联 .pdb 文件必须可用。因此,如果发布此库,就必须发布 PDB。
注意 若要不使用 .pdb 文件创建包含调试信息的库,必须选择编译器的 C 7.0 兼容 (/Z7) 选项。如果使用预编译头选项,则预编译头和其他源代码的调试信息都放在 PDB 中。当指定“程序数据库”选项时忽略 /Yd 选项。
参考书籍: <link&load>, 据说很NB的一本书.
- Obj文件以及Linker&Loader
- Linker & Loader
- linker loader
- [rar文件] linker and loader 中文版+英文版
- 《linker & loader》读书笔记
- Linker and loader
- compile&linker&loader
- linker && loader (二)
- BCB6 Linker Error C0W32.OBJ
- 开始攻克Linker and loader
- linker and loader 读书笔记(一)
- c++对象模型 linker&loader
- 《Linker and Loader》经典书籍
- linker and loader 读书笔记 一
- Linker and Loader 读书笔记 二
- linker and loader (一)
- 分析obj文件,理解重定位过程以及obj文件在程序中扮演的角色
- .obj文件
- 2006年要读的一些书 Future Reading List
- 我的Fast marching...
- POWERBUILDER DDE与excel,通讯
- 从Java类库看设计模式3
- eclipse swtdesigner install:
- Obj文件以及Linker&Loader
- 上网不用防火墙!一招克死所有病毒 [转]
- 梦想三部曲(转贴于榕树下网站,作者:天师羽翼)
- 做目前最重要的事情...
- 如何连接SQL Server数据库(Java版)
- [翻译] Effective C++, 3rd Edition, Chapter 2. Constructors(构造函数),Destructors(析构函数)与 Assignment Operators(赋值运算符)
- 盐田港
- 大连港集团
- 【转载】资源分配与软件系统开发(原作者:libaojian@sina.com)