百度百科:

  程序编译时生成的中间代码文件。目标文件,一般是程序编译后的二进制文件,再通过链接器(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. ACM学习历程—HDU4417 Super Mario(树状数组 && 离线)

    Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability re ...

  2. bzoj 3796: Mushroom追妹纸 AC自动机+后缀自动机+dp

    题目大意: 给定三个字符串s1,s2,s3,求一个字符串w满足: w是s1的子串 w是s2的子串 s3不是w的子串 w的长度应尽可能大 题解: 首先我们可以用AC自动机找出s3在s1,s2中出现的位置 ...

  3. C/C++面试题总结(2)

    C++部分: 1.static(静态)变量有什么作用? 2.virtual关键字用法 3.const有哪些作用 或<王道程序员求职宝典>P95 4.new/delete与malloc/fr ...

  4. scrollHeight

    scrollHeight=显示内容高度+隐藏内容高度 参考: https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollHeight ...

  5. app专项测试(稳定性测试、安全性测试)

    https://blog.csdn.net/xiaomaoxiao336368/article/details/84887948

  6. JVM体系结构之一:总体介绍

    一.Java的内存区域划分 Java 虚拟机在执行Java程序的时候会把它管理的内存区域划为几部分,这一节我们就来解析一下Java的内存区域. Java的内存区域主要分为五部分: 程序计数器(PC) ...

  7. glusterfs安装配置简单使用

    GlusterFS是一种分布式分布式文件系统,默认采用无中心完全对等架构,搭建维护使用十分简单,是很受欢迎的分布式文件系统. 官网https://www.gluster.org/,官网上表示Glust ...

  8. linux命令-任务计划-cron

    任务计划,有时间规律的执行某些事情. 查看任务计划:crontab -l 指定用户:crontab -l  -u 用户名 该用户没有任务计划. 自定义任务计划 进入一个操作和vim类似的界面 用空格分 ...

  9. JS取得绝对路径

    在项目中,我们经常要得到项目的绝对路径,方便我们上传下载文件,JS为我们提供了方法,虽说要迂回一下.代码如下: function getRealPath(){        //获取当前网址,如: h ...

  10. 谁是Docker的开发者

    由CHRIS DAWSON发表在thenewstack/DATA RESEARCH qianhen123/CHB译 我们分析了Docker的容器库并提出两个问题: 1.Docker的贡献者们感兴趣的其 ...