导航:首页 > 源码编译 > obj文件编译后的结构

obj文件编译后的结构

发布时间:2022-05-30 08:58:05

‘壹’ 聊天时后面有个obj什么意思

这是一种文本文件,程序编译时生成的中间代码文件目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了。

OBJ只给出了程序的相对地址,而可执行文件是绝对地址。

obj文件特点:OBJ文件是一种3D模型文件。不包含动画、材质特性、贴图路径、动力学、粒子等信息。

OBJ文件主要支持多边形(Polygons)模型。虽然也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息

OBJ文件支持三个点以上的面,这一点很有用。

很多其它的模型文件格式只支持三个点的面,所以导入Maya的模型经常被三角化了,这对于我们对模型进行再加工甚为不利。

(1)obj文件编译后的结构扩展阅读:

OBJ文件支持法线和贴图坐标。在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中。

这样文件导入Maya后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。

obj文件基本结构:OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。

OBJ文件由一行行文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。

有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。

多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符()。注意连接符()后面不能出现空格或Tab格,否则将导致文件出错。

‘贰’ obj文件的OBJ文件的基本结构

OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。OBJ文件由一行行文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符()。注意连接符()后面不能出现空格或Tab格,否则将导致文件出错。
下列关键字可以在OBJ文件使用。在这个列表中, 关键字根据数据类型排列,每个关键字有一段简短描述。
顶点数据(Vertex data):
v 几何体顶点(Geometric vertices)
vt 贴图坐标点(Texture vertices)
vn 顶点法线(Vertex normals)
vp 参数空格顶点 (Parameter space vertices)
自由形态曲线(Free-form curve)/表面属性(surface attributes):
deg 度(Degree)
bmat 基础矩阵(Basis matrix)
step 步尺寸(Step size)
cstype 曲线或表面类型 (Curve or surface type)
元素(Elements):
p 点(Point)
l 线(Line)
f 面(Face)
curv 曲线(Curve)
curv2 2D曲线(2D curve)
surf 表面(Surface)
自由形态曲线(Free-form curve)/表面主体陈述(surface body statements):
parm 参数值(Parameter values )
trim 外部修剪循环(Outer trimming loop)
hole 内部整修循环(Inner trimming loop)
scrv 特殊曲线(Special curve)
sp 特殊的点(Special point)
end 结束陈述(End statement)
自由形态表面之间的连接(Connectivity between free-form surfaces):
con 连接 (Connect)
成组(Grouping):
g 组名称(Group name)
s 光滑组(Smoothing group)
mg 合并组(Merging group)
o 对象名称(Object name)
显示(Display)/渲染属性(render attributes):
bevel 导角插值(Bevel interpolation)
c_interp 颜色插值(Color interpolation)
d_interp 溶解插值(Dissolve interpolation)
lod 细节层次(Level of detail)
usemtl 材质名称(Material name)
mtllib 材质库(Material library)
shadow_obj 投射阴影(Shadow casting)
trace_obj 光线跟踪(Ray tracing)
ctech 曲线近似技术(Curve approximation technique)
stech 表面近似技术 (Surface approximation technique)
OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是.mtl的独立文件中。关键字mtllib即材质库的意思。
材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB(红绿蓝)的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。
usemtl指定了材质之后,以后的面都是使用这一材质,直到遇到下一个usemtl来指定新的材质。

‘叁’ c++ obj文件与exe文件的区别

编译:当前源代码编译成二进制目标文件(.obj文件)

链接(link):将生成的.obj文件与库文件.lib等文件链接,生成可执行文件(.exe文件)。

可以说.obj文件是.exe文件的前身;

1、obj里存的是编译后的代码跟数据,并且有名称,所以在连接时会出现未解决的外部符号一说。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。

编译器会默认链接一些常用的库,其它的需要你自己指定。

2、目标文件,一般是程序编译后的【二进制文件】,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的【相对地址】,而可执行文件是【绝对地址】。CPP对应的二进制代码格式obj,是未经重定位的!

3、编译C 程序会产生obj 文件和exe 文件,我们都知道exe 文件是可执行文件,但obj 文件是做什么用的呢?

查了下资料发现obj 文件和exe 文件都是二进制数据文件,其中obj 文件是COFF 格式,exe 文件时PE 格式。

那为什么不直接让 obj 文件作为可执行文件呢?

原来obj 文件的格式是跨平台 的,通过link 可以将obj 链接为所使用系统能够识别的格式,比如windows 系统中的exe 文件。

一个现代编译器的主要工作流程如下:
源程序(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标程序(object code)→ 连接器(链接器,Linker)→ 可执行程序(executables)

(3)obj文件编译后的结构扩展阅读

C++编译 (.obj, .lib, .dll, .exe的关系)

一、总体介绍:

c++程序在编译后,在目标路径下会生成多个文件:

Debug文件夹(*.exe,*.ilk,*.obj,*.pch,*.pdb,*.idb,*,pdb),*.cpp,*.dsp,*.ncb,*.plg

*.exe:是生成的可执行文件

*.ilk:当选定渐增型编译连接时,连接器自动生成ILK文件,记录连接信息

*.obj:是目标文件,源程序编译后的产物

*.pch:全称是PreCompiled Header,就是预先编译好的头文件

*.idb:文件保存的信息,使编译器在重新编译的时候只重编译最新改动过的函数和只对最新类定义改动过的源文件进行重编译,以提高编译速度

*.pdb:全称是Program DataBase,即程序数据库文件,用来记录调试信息

*.dsp:(全称是Developer Studio Project)也是一个配置文件

*.ncb:(全称No Compile Browser)的缩写,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开发环境自动生成

*.plg:实际上是一个超文本文件,可以用Internet Explorer打开,记录了Build的过程

*.cpp:就是C++源代码文件.

二、具体介绍:

lib是和dll对应的。

lib是静态的库文件,dll是动态的库文件。

所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe文件中,以后运行 你的exe的时候不再需要lib。

所谓动态就是exe运行的时候依赖于dll里面提供的功能,没有这个dll,你的exe无法运行。

lib, dll, exe都算是最终的目标文件,是最终产物。而c/c++属于源代码。源代码和最终目标文件中过渡的就是中间代码obj,实际上之所以需要中间代码,是你不可能一次得到目标文件。

比如说一个exe需要很多的cpp文件生成。而编译器一次只能编译一个cpp文件。

这样编译器编译好一个cpp以后会将其编译成obj,当所有必须要的cpp都编译成obj以后,再统一link成所需要exe,应该说缺少任意一个obj都会导致exe的链接失败。

  1. obj里存的是编译后的代码跟数据,并且有名称,所以在连接时会出现未解决的外部符号一说。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。

2.理论上可以,但实际中通常用lib。

3.编译器会默认链接一些常用的库,其它的需要你自己指定。

附上lib和DLL的区别

(1)lib是编译时需要的,dll是运行时需要的。

如果要完成源代码的编译,有lib就够了。

如果也使动态连接的程序运行起来,有dll就够了。

在开发和调试阶段,当然最好都有。

(2)一般的动态库程序有lib文件和dll文件。

lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。

如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。

但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。

(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件。

引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址。

这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。

从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。

‘肆’ obj 是什么文件类型啊可能是三维模型方面的,请大侠解答

这是tuboc c++软件编译生成的文件
obj文件目标文件,一般是程序编译后的二进制文件,在通过链接器和资源文件链接就成exe文件了。
OBJ只给出了程序的相对地址,而EXE是绝对地址。
OBJ文件不支持有孔的多边形面。
举个例子说明一下:
选择Maya的创建多边形工具(Polygons -> Create Polyon Tool),在视图中画一个四边形,不要按回车,按Ctrl在四边形中间点一下,可以继续在四边形中挖一个洞。把这个有孔的多边形存成OBJ格式,在导入Maya时,会发现多边形少了一块。如果你把这也看成错误,现在至少你已经知道错误的原因了,就是OBJ文件不支持有孔的多边形面。
OBJ文件 -- 实际问题:
现在来讨论一点比较实际的问题吧,就是一旦你遇到了一个出错的OBJ文件,倒底该怎么办?
当你打开OBJ文件后,往往会看到有几万行的代码,你恐怕还没本事情一眼看出错误所在行,除非程序的错误信息中已经告诉你错误行。如果你不知道错误在哪里,可以用排除法,弄清楚肯定正确的代码范围,通过缩减错误代码范围定位错误。例如,你先新建一个空的OBJ文件,把有错的OBJ文件代码粘贴一半过来,然后把这个只有一半代码的新OBJ文件导入Maya。如果这时没有错误信息,说明错误行是在另一半代码中,可以从另一半代码中再粘贴一部分代码试试看;如果这时出现错误,说明错误行就在粘贴的代码中,可以把粘贴过来的代码删去一部分再试试看。就这样,逐步缩减范围直到找到错误行为止。
这种方法虽然很麻烦,不过颇为有效。如果你不会编程,又遇到非常紧急的情况,这种方法还是值得一试的。
OBJ文件 -- 细节:
掌握了这么多差不多也够用了,不过由于网上详细讲解OBJ文件的中文文档很少,我还是再讲一些例子,给大家提供多一点的信息吧。
简单的OBJ格式写法。
# Simple Wavefront file
v 0.0 0.0 0.0
v 0.0 1.0 0.0
v 1.0 0.0 0.0
f 1 2 3
面可以使用负值索引,有时用负值索引描述面更为简便。
"f -4 -3 -2 -1"这句索引值"-3"表示从"f"这行往上数第3个顶点,就是"v -0.500000 0.000000 -0.800000",其它的索引值以此类推。 因此与这一行等效的正值索引写法为:"f 1 2 3 4"
v -0.500000 0.000000 0.400000
v -0.500000 0.000000 -0.800000
v -0.500000 1.000000 -0.800000
v -0.500000 1.000000 0.400000
f -4 -3 -2 -1
OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。关键字"mtllib"即材质库的意思。
材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB(红绿蓝)的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。
"usemtl"指定了材质之后,以后的面都是使用这一材质,直到遇到下一个"usemtl"来指定新的材质。

‘伍’ *.c,*.obj,*.exe,分别是什么程序

C是程序代码百(即源文件)是保存你的C代码的文件,C文件依次编译,并对应。每个OBJ文件都被生成,即问目标文件的答案,是对应C文件的二进制版本,一旦连接,您就有了您的.exe文件,它是您的可执行文件。

Obj文件结构:Obj文件不需要任何类型的文件头,尽管用几行文件信息启动文件是很常见的。

OBJ文件由几行文本组成,注释行以符号“#”开头,空格和空白行可以随意添加到文件中,使其更具可读性。带有单词的行以一个或两个标记的字母(或关键字)开头,这些字母或关键字描述行是什么类型的数据。

(5)obj文件编译后的结构扩展阅读:

C编译的整个过程非常复杂,大致可以分为以下几个阶段:

1.预处理阶段

工作在这个阶段主要是源代码的预处理,主要包括宏定义指令,头文件包含指令,预定义的指令和特殊字符的处理,如更换一个宏定义和文件的文件头包含预定义的代码来代替,总之这一步主要做一些更换,输出相应的文件相同的意义,但不同的内容文件。

2.编译和优化

编译是通过词法分析将第一阶段处理的文件转换成汇编语言。优化包括中间代码的优化,如公共表达式的删除、循环优化等。并优化生成目标代码,如如何充分利用机器的寄存器来存储相关变量的值,以减少访问内存的次数。

3.组装阶段

将汇编语言翻译成机器指令。

‘陆’ C语言源程序文件名的后缀是.OBJ,经过编译后,生成文件的后缀是什么经过连接后,生成文件的后缀是什么

C语言源程序文件名的后缀是.c。C源程序经过C编译程序编译之后生成一个后缀为.OBJ的二进制文件,

然后由称为“连接程序”的软件,把此.OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为.EXE的可执行文件。

由高级语言编写的程序称为“源程序”,把由二进制代码表示的程序称为“目标程序”。为了把源程序转换成机器能接受的目标程序,这时我们需要具有翻译功能的软件--“编译程序”。每种高级语言都有与它对应的编译程序。

(6)obj文件编译后的结构扩展阅读

1、目标文件的扩展名为“.obj”(Windows)或“.o”(Linux)。目标文件已经是机器指令,但还不能运行,因为目标文件还没有解决函数调用问题。

2、可执行文件的扩展名为“.exe“。

‘柒’ “obj”是什么意思

1、释义:是一种文本文件,程序编译时生成的中间代码文件目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的相对地址,而可执行文件是绝对地址。

2、obj文件特点:(1) OBJ文件是一种3D模型文件。不包含动画、材质特性、贴图路径、动力学、粒子等信息。(2) OBJ文件主要支持多边形(Polygons)模型。虽然也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息。(3) OBJ文件支持三个点以上的面,这一点很有用。很多其它的模型文件格式只支持三个点的面,所以导入Maya的模型经常被三角化了,这对于我们对模型进行再加工甚为不利。(4) OBJ文件支持法线和贴图坐标。在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中,这样文件导入Maya后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。

3、obj文件基本结构:OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。OBJ文件由一行行文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符()。注意连接符()后面不能出现空格或Tab格,否则将导致文件出错。

‘捌’ c 语言编译后产生的obj文件是做什么的

简单的说就是目标代码.
obj文件是单独的目标文件,它还不能单独运行.需要把相关的obj文件连接到一起,才能产生可执行文件.

‘玖’ obj是什么文件

obj就是目标文件,是你的源程序经过编译程序编译后生成的,它不能直接执行,需要连接程序连接后才能生成可执行文件,这样就能值行了。
这种目标文件一般是由机器代码组成的,但也有例外,可以是自己定义的一些伪指令代码,打开obj文件可以使用UltraEdit或者autodesk maya软件。

‘拾’ obj是什么文件obj文件怎么打开

obj文件是3D模型文件格式。由Alias|Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准,适合用于3D软件模型之间的互导,也可以通过Maya读写。比如你在3dsMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。目前几乎所有知名的3D软件都支持OBJ文件的读写,不过其中很多需要通过插件才能实现。

(10)obj文件编译后的结构扩展阅读:

obj文件的文件特点

1、OBJ文件是一种3D模型文件。不包含动画、材质特性、贴图路径、动力学、粒子等信息。

2、OBJ文件主要支持多边形(Polygons)模型。虽然也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息。

3、OBJ文件支持三个点以上的面,这一点很有用。很多其它的模型文件格式只支持三个点的面,所以导入Maya的模型经常被三角化了,这对于我们对模型进行再加工甚为不利。

(4)OBJ文件支持法线和贴图坐标。在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中,这样文件导入Maya后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标。

阅读全文

与obj文件编译后的结构相关的资料

热点内容
php前补零 浏览:731
算法推荐广告伦理问题 浏览:921
亚马逊云服务器的选择 浏览:810
单片机频率发生器 浏览:732
备份与加密 浏览:623
用什么app可以看论坛 浏览:52
javajdbcmysql连接 浏览:473
制作linux交叉编译工具链 浏览:751
编程负数除以正数 浏览:512
app和aso有什么区别 浏览:326
手机vmap是什么文件夹 浏览:36
塔科夫锁服如何选择服务器 浏览:290
消费者生产者问题java 浏览:61
程序员筱柒顾默结婚的时候 浏览:578
安卓截长屏怎么弄 浏览:475
优信办理解压手续怎么那么慢 浏览:605
私有云服务器一体机安全吗 浏览:430
python的tk界面禁用鼠标 浏览:186
怎么看服务器mac地址 浏览:291
安卓如何将图镜像翻转 浏览:325