百度百科:

  程序编译时生成的中间代码文件。目标文件,一般是程序编译后的二进制文件,再通过链接器(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. Arc065_E Manhattan Compass

    平面上有$N$个点$(X_i\space, Y_i)$,定义$D(a,b)=|X_a-X_b|+|Y_a-Y_b|$. 如果你当前在$(p,q)$,这个无序二元组(即$(p,q)$和$(q,p)$被认 ...

  2. loj516dp一般看规律

    STL 这...我只能说是...考得是... STL的正确用法? #include<iostream> #include<cstdio> #include<cstdlib ...

  3. poj2420 A Star not a Tree? 模拟退火

    题目大意: 给定n个点,求一个点,使其到这n个点的距离最小.(\(n \leq 100\)) 题解 模拟退火上 #include <cmath> #include <cstdio&g ...

  4. Maven(2)-坐标和依赖

    本文简要介绍Maven里面的坐标(coodinate)以及maven依赖管理(Dependency) 一.坐标 先来个截图: 在上图peoject栏目有groupId,artifactId,versi ...

  5. Centos6.5 安装pip

    1.下载 sudo wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 2.安装  python get-pip.py 参 ...

  6. spring容器扩展功能之一:spring加载ApplicationContext.xml的四种方式

    容器加载Bean的常见两个类ApplicationContext和BeanFactory, 一.首先,看看spring中加载配置在xml中的Bean对象到容器 spring 中加载xml配置文件的方式 ...

  7. wpf 样式继承

    当定义的wpf多个样式,其样式内容(属性.触发器等)有较多的重复时,可以考虑将其抽象成父样式,来提升样式代码的可维护性以及减少代码冗余. wpf 进行样式继承时,需要使用style的BasedOn属性 ...

  8. AJAX经常遇到的那些问题

    本文主要介绍了AJAX工作原理以及在面试题经常会遇到的问题,目录如下: 什么是Ajax 为什么要使用Ajax? Ajax特点? AJAX优缺点? Ajax流程? XMLhttprequest对象 AJ ...

  9. JS设置cookie、读取cookie、删除cookie(转)

    JS设置cookie.读取cookie.删除cookie 转载  2015-04-17   投稿:hebedich    我要评论 Js操作Cookie总结(设置,读取,删除),工作中经常会用到的哦! ...

  10. 正则表达式需要匹配的内容本身就自带了html转义字符,需要转义,否则无法匹配

    1.正则表达式需要匹配的内容本身就自带了html转义字符,需要转义,否则无法匹配 例如,对于"requestNo\":\"3b89957436eaacd8311535e0 ...