百度百科:

  程序编译时生成的中间代码文件。目标文件,一般是程序编译后的二进制文件,再通过链接器(LINK.EXE)和资源文件链接就成可执行文件了。OBJ只给出了程序的相对地址,而可执行文件是绝对地址。[1]

     这个问题不是很简单,你只看到了文件从源代码到EXE文件这个流程中的一小部分。要详细的深究这个问题,需要很多时间和精力。
 
 
    
    
     应该是在上图的第四个步骤,会产生obj文件。但它表述的还不够全面,少了一个链接的部分,所以应该在第五步之前再加上一个链接的步骤;
     资源链接很好理解,但链接器(LINK.EXE)?
    ——链接器(LINK.EXE)是链接.lib文件、.obj目标文件、.res;.lib文件又称之为导入库文件,只记录了函数所在DLL的位置。
 
.lib导入库的概念:     
     导入库是一个很棒的做法,如果硬件将平台比作房子,系统比作苦力,API比作积木;然后我们要写的程序比作一张图纸,要苦力按照图纸搭建成我们所需要的积木形状;我们所写的源代码更多,更形象的是完成这个积木的思想,API更像是在这间房子里,所有能让苦力完成这个积木素材。而导入库的概念,就好比将我写的源代码思想通过编译器、资源编译器、链接器翻译成苦力能懂的鸟语。然后链接器再链接.lib文件,告诉苦力需要搭建的积木的素材都在什么地方,让你好去找啊?如果苦力没有,我做好了这个素材直接给你就得了(如DLL、声音、图片、光标)。如果你有我还给苦力另一个同样的积木(Dos下的静态库),那不是脱了裤子放屁么?
.obj目标文件的概念:
  可见,在我们的编程语言和计算机中间多了一个编译器,我更形象的将它理解为我们与计算机之间的翻译。翻译做的事情,我必然看不懂,但它的工作成果就是obj、res、exe这些二进制文件;所有的翻译,在某种程度上都存在欺骗的可能性...这是题外话,所以obj文件是什么?是计算机所能理解的二进制代码,是编译成exe过程中需要的第一步、是ML.exe运行后的结果。
.obj和.exe有什么不同?换句话说编译器和链接器分别做了什么呢:
  从表面上看.obj不能执行,但是.exe可以执行.还有他们的后缀名不同、.exe比.obj多了.lib、.res文件;除此之外,要论述<.obj和.exe有什么不同>这个问题,那么必然要切入<编译器和链接器分别做了什么呢>这个问题,但是这已经超出我问这个问题的初衷了.我会有这个问题只是因为<编译执行和解释执行有什么差别,为什么会产生.obj文件,而obj文件又是什么>这个问题.从此问题引申出来的其他问题,就不在深究,留在以后再说吧...
编译执行和解释执行:
  这个问题是这些问题的原始问题,换句话说其他问题都是这个问题的延伸;如果抽象一下也很有意思的,编译执行就好像是Link.exe直接给了苦力一张它懂的纸条,我全部都苦力你干什么,干完就完事;而解释执行就好像给苦力陪了一台随身携带的翻译器,苦力劳作一下,翻译器再告诉苦力下一个命令,直到苦力将翻译器中的所有命令都完成才罢休。
  这个比喻也完美的解释了“解释执行能跨平台,而编译执行却不行”,因为后者直接给了一张纸,要么苦力看得懂,要么苦力看不懂,看不懂那就干不了,这很正常(因为苦力也分种族)...而前者直接实现了“人工智能”,苦力是哪里的人翻译器就说哪里的话..速度的问题,也完美的解释了,一张纸和翻译器相比,当然前者更快...
什么是相对地址:
 
什么是绝对地址:  
 

什么是obj文件?的更多相关文章

  1. CSharpGL(9)解析OBJ文件并用CSharpGL渲染

    CSharpGL(9)解析OBJ文件并用CSharpGL渲染 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo ...

  2. [计算机图形学] OpenGL读取obj文件并显示其3D效果

     读取三维网格模型(Wavefront OBJ文件) 无法向立方体:cube.obj 有法向兔子模型:bunny.obj 有法向有纹理八字模型:Eight.obj OBJ文件的格式可参考:http: ...

  3. delphi 连接 c++ builder 生成obj文件

    delphi 连接 c++ builder 生成obj文件 delphi 可以连接c++ builder 生成OMF格式的obj文件,会报一个错.[DCC Error] E2065 Unsatisfi ...

  4. obj文件的连接问题以及tlib的基本用法

    1.基础研究 用tcc将程序编译为.obj文件. 这里也可以使用tcc -linclude run.c来将run.c文件编译成run.obj文件. 再用tcc对下面的程序进行编译链接,发现提示错误: ...

  5. 软件光栅器实现(四、OBJ文件加载)

    本节介绍软件光栅器的OBJ和MTL文件加载,转载请注明出处. 在管线的应用程序阶段,我们需要设置光栅器所渲染的模型数据.这些模型数据包括模型顶点的坐标.纹理.法线和材质等等,可以由我们手动编写,也可以 ...

  6. 链接学习之obj文件探索

    Windows的gcc环境,往官网http://sourceforge.net/project/showfiles.php?group_id=2435 下载MinGW,安装,安装完毕后按照包 配置环境 ...

  7. 谷歌开发的draco格式文件将obj文件压缩成drc文件后将大大减小文件大小(threejs加载有mtl文件的drc文件)

    问题描述:当前threejs是92版本 但是当前版本还没有能够直接加载带贴图文件的drc格式的loader: 解决办法:先加载mtl文件将obj文件分解(按照mtl文件内材质贴图信息进行分解)再将分解 ...

  8. 访问 .obj文件,由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射

    一.错误描述 HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 最可能的原因: 可 ...

  9. C#快速删除bin和obj文件夹的方法

    C#程序总会生成bin和obj文件夹,为了减小源码的大小,就有必要将这两个文件夹删除,于是想到用批处理文件来删除. 以下是批处理的代码: @echo offset nowPath=%cd%cd /cd ...

  10. 读取obj文件用Mesh创建实例化

    using UnityEngine; using System.Collections; using System.IO; using System.Collections.Generic; usin ...

随机推荐

  1. bzoj 4504: K个串 可持久化线段树+堆

    题目: Description 兔子们在玩k个串的游戏.首先,它们拿出了一个长度为n的数字序列,选出其中的一 个连续子串,然后统计其子串中所有数字之和(注意这里重复出现的数字只被统计一次). 兔子们想 ...

  2. Access中创建子数据表/主子数据表

    摘 要:我们为什么要使用Access,而不用Excel,因为数据库可以大幅度地消除冗余数据,其方法就是将数据拆分到不同的表中,再通过“关系”建立表间的联系.那么如何确定表间的关系呢.表之间的关系是通过 ...

  3. javascript:function 函数声明和函数表达式 详解

    函数声明(缩写为FD)是这样一种函数: 有一个特定的名称 在源码中的位置:要么处于程序级(Program level),要么处于其它函数的主体(FunctionBody)中 在进入上下文阶段创建 影响 ...

  4. HDU1247(经典字典树)

    Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  5. 二 kafka设计原理

    kafka的设计初衷是希望作为一个统一的信息收集平台,能够实时的收集反馈信息,并需要能够支撑较大的数据量,且具备良好的容错能力. 1.持久性     kafka使用文件存储消息,这就直接决定kafka ...

  6. oracle--存储过程2--bk

    oracle存储过程demo1---无返回值的存储过程: /* 写一个过程,可以向book表添加书 */ create table book( id number(4), book_name varc ...

  7. Project Server 2016 RestAPI调用测试

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  8. mysql 简单的sql优化示例[不定时更新]

    对于慢sql的分析步骤: 1) desc|explain sql 查看执行计划, 对于type很慢的, 分析是否建立了对应字段的索引 2) 进行排除法, 把子查询抽离出来, 单独执行,定位慢查询是哪个 ...

  9. 网络编程之socket编程

    TCP/IP协议 网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程).这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程 ...

  10. [51nod1247]可能的路径(思维题)

    题意:给定(a,b),(x,y)  ,(a,b)可以通向(a-b,b) (a+b,b) (a,a+b) (a,a-b) 求能否到达(x,y) 解题关键:类似于更相减损,变换过程中gcd是一样的. #i ...