索引:.obj,.lib,.dll,.h之间的相互关系。

本文详细解析了.obj,.lib,.dll,.h文件之间的关系及其在VC++中的应用方式,包括如何创建.lib文件及如何在项目中使用.obj文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 http://topic.youkuaiyun.com/t/20000912/22/29670.html

优快云首页新闻论坛小组Blog文档下载读书Tag网摘搜索.NETJava游戏视频人才外包第二书店程序员

.obj,.lib,.dll,.h之间的相互关系。

楼主Sunlet(大赢家) 2000-09-12 22:42:00 在 VC/MFC / 基础类 提问

1。.obj,.lib,.dll,.h之间的相互关系如何?使用的时候调用方式有什么不同?  
  2。怎么自己做一个.lib的文件,请把过程将一下,最好有示例,谢谢!  
  3。工程文件中怎么使用obj.文件。  
  问题点数:80、回复次数:8Top

scrolling="no" frameborder="0" src="http://topic.youkuaiyun.com/Include/Board.htm?Tags=">

1 楼Holly()回复于 2000-09-13 02:34:00 得分 80

1.  
  obj:是CPP对应的二进制代码格式,是未经重定位的!  
  lib:是若干个obj的集合,本质与obj相同!  
  dll:是可实际运行的二进制代码,有定位代码的!  
  h:是头文件,也可算是源代码,因为当CPP中用#include时,会把包含的文件的内容在CPP中扩展开!  
  Top

2 楼Holly()回复于 2000-09-13 02:45:00 得分 0

2.  
  在VC++中利用APPWIZARD可以建立一个LIB的工程,  
  file->new->projects->Win32   static   library;  
  再将你的源文件添加到该工程中即可!  
  project->add   to   projects->files;  
   
  3.将obj文件添加到工程中即可!  
  project->add   to   projects->files;选择你的obj文件;  
  Top

3 楼Holly()回复于 2000-09-13 02:55:00 得分 0

1.  
  使用时,obj和lib是没有本质区别的,lib就是obj,使用lib地方都可以使用obj;  
  dll是动态连接库,是运行时动态加载的,而lib是静态的连接库,相当于程序编译的未经链接定位的二进制代码!(obj的一种表现形式)  
  h文件是用来编写函数(类,变量类型)原型声明的,通常dll、lib和obj的使用需要有h文件的配合,以获得二进制代码的原型声明!  
  当然使用dll时也可用GetProcAddress来配合避免使用h文件!Top

4 楼Holly()回复于 2000-09-13 03:25:00 得分 0

备注:  
  在使用DLL时也会有一个附加的lib是用来表明DLL的引出表而用的,其中的信息相当于一个obj中只有声明引出的部分,没有函数体。Top

5 楼Sunlet(大赢家)回复于 2000-09-13 11:24:00 得分 0

怎么把我的lib   做成象编译器的lib那样,自动添加到我的工程中.而不用每次Add   files   to   projectTop

6 楼Holly()回复于 2000-09-13 11:52:00 得分 0

没有办法!必须每次自己添加!  
  最好的情况是在Tools->options...->Directories中将include、library、source   files的路径设置添加你的代码库的目录,为了调试方便,把Debug版和Release版分别输出不同的名字,如将Debug版的输出文件后添加一个 D.  
  但是这样也必须每次使用时在使用的工程设置的project->settings->link->object/library   modules:栏中将需要的库的名字添加进去(无需路径)!Top

7 楼Sunlet(大赢家)回复于 2000-09-13 21:37:00 得分 0

非常感谢Holly的帮助,我做lib的时候遇到以下问题,请你在解释一下:  
  我编写了一个支持mfc的lib(foxreader.lib),当mfc程序调用它时,就有以下几个warning,  
  单程序仍然能执行,请问一下,怎么去除这些warning.  
  Linking...  
  LINK   :   warning   LNK4098:   defaultlib   "mfc42.lib"   conflicts   with   use   of   other   libs;   use   /NODEFAULTLIB:library  
  LINK   :   warning   LNK4098:   defaultlib   "mfcs42.lib"   conflicts   with   use   of   other   libs;   use   /NODEFAULTLIB:library  
  LINK   :   warning   LNK4098:   defaultlib   "msvcrt.lib"   conflicts   with   use   of   other   libs;   use   /NODEFAULTLIB:library  
  foxclass.exe   -   0   error(s),   3   warning(s)  
  Top

8 楼Holly()回复于 2000-09-13 23:36:00 得分 0

这个Warning没有必要去掉!  
  这是因为你的foxreader.lib中也有用到相同的MFC的lib文件,Linker自动将重复的链接跳过给出的信息!  
  Top

相关问题

 
北京百联美达美数码科技有限公司  版权所有  京 ICP 证 020026 号
Copyright © 2000-2006, youkuaiyun.com, All Rights Reserved
width="0" scrolling="no" height="0" frameborder="no" src="http://www.youkuaiyun.com/ggmm/dd333.htm" border="0" name="myframe" id="myframe">
<think>好的,我现在需要帮助用户查找与W2S.obj相关的技术资料或问题,特别是关于文件格式和使用方法。首先,我需要确定用户提到的W2S.obj具体指的是什么,因为“.obj”文件在计算机领域有多种用途。 首先,.obj文件最常见的有两种情况:一种是3D模型文件格式,如Wavefront OBJ;另一种是编译过程中生成的中间对象文件,如Windows下的.obj或Linux下的.o。用户提到的“W2S.obj”可能属于其中一种,但需要进一步分析。 接下来,我需要查看用户提供的引用内容,寻找可能的线索。引用[1]提到了osg(OpenSceneGraph)工具,用于转换3D模型格式,如IVE转3DTiles,这里可能涉及到的.obj文件是3D模型格式。引用[2]讨论了.obj作为编译中间文件的情况,与.lib.dll.exe等的关系。引用[3]和[4]涉及Python脚本执行和VS Code终端设置,可能与编译或开发环境有关。 用户的问题是关于“W2S.obj”的文件格式或使用方法,因此需要考虑这两种可能性。首先需要判断W2S.obj是3D模型文件还是编译生成的中间文件。可能用户是在开发或使用某个工具时遇到了这个文件,需要进一步的技术资料。 如果W2S.obj是3D模型文件,那么需要参考Wavefront OBJ格式的规范,解释其结构和使用方法,比如如何用Blender、Maya等软件打开,或者在OpenSceneGraph中如何处理。此外,引用[1]提到的OConv.exe工具支持将IVE等格式转换为3DTiles,可能W2S.obj是该工具处理过程中的某个中间文件或输入文件。 如果W2S.obj是编译生成的中间文件,那么需要解释其在C/C++编译过程中的作用,如目标文件如何链接成可执行文件,或如何处理相关的库文件。引用[2]中提到了.obj.lib.dll等的关系,这可能与编译流程有关,尤其是在Windows环境下。 为了全面回答,我应该涵盖这两种可能性,并指导用户如何根据上下文确定具体类型。此外,结合用户提供的引用,可能需要建议使用特定工具或命令来处理该文件。例如,如果是3D模型,可以使用OConv.exe转换;如果是编译中间文件,可能需要检查编译设置或链接选项。 最后,生成相关问题,帮助用户进一步探索可能的疑问,例如如何转换OBJ格式、如何解决编译中的目标文件问题等。</think>### 关于W2S.obj的技术资料与使用方法 #### 1. **W2S.obj的可能含义** `.obj`文件有两种常见场景需区分: - **3D模型文件**:Wavefront OBJ格式,用于存储三维模型数据(顶点、贴图等),通常与材质文件`.mtl`配合使用[^1][^2]。 - **编译中间文件**:在C/C++编译过程中生成的二进制目标文件(Windows为`.obj`,Linux为`.o`),用于后续链接生成可执行文件或库[^2]。 根据您的描述,若`W2S.obj`涉及3D工具链(如引用[1]的`OConv.exe`),则更可能属于**3D模型文件**;若与编译相关,则属于**目标文件**。 --- #### 2. **场景1:3D模型文件(Wavefront OBJ)** ##### 文件格式 - **结构**:文本格式,包含顶点坐标$v(x,y,z)$、纹理坐标$vt(u,v)$、法线$vn(x,y,z)$及面定义$f$(索引组合)。 - **示例**: ```obj v 1.0 2.0 3.0 vt 0.5 0.5 vn 0.0 1.0 0.0 f 1/1/1 2/2/2 3/3/3 ``` ##### 使用方法 - **查看/编辑**:使用Blender、Maya或MeshLab等软件打开。 - **转换工具**:引用[1]中的`OConv.exe`支持将OBJ转换为3DTiles等格式,命令示例: ```bash OConv.exe -function obj23dtiles -filename W2S.obj -offset "x y z" ``` --- #### 3. **场景2:编译中间文件(目标文件)** ##### 文件作用 - **编译流程**:源代码(`.c/.cpp`)→编译器生成`.obj`→链接器组合`.obj`和库文件(`.lib/.dll`)→生成`.exe`[^2]。 - **调试**:若`W2S.obj`编译失败,需检查代码语法或编译参数(如引用[4]的`set-ExecutionPolicy`可能影响脚本执行环境)。 ##### 相关命令 - **编译生成**(以MSVC为例): ```bash cl /c W2S.cpp # 生成W2S.obj link W2S.obj /OUT:app.exe ``` --- #### 4. **如何确定具体类型** - **文件内容**:用文本编辑器打开,若为可读文本(含`v`/`f`等关键字),则为3D模型;若为乱码,则为二进制目标文件。 - **上下文场景**: - 若涉及3D工具(如`OConv.exe`),按3D模型处理。 - 若在编译目录中发现`.obj`与`.cpp`共存,按目标文件处理。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值