社区
C语言
帖子详情
关于.h与.lib的关系的问题!!
wozhy
2002-09-29 09:09:34
问题是这样的:
如果有N个.h文件的实现都是靠M个.lib文件来完成的话,那在Link的时候,编译器怎么知道该调用哪个.lib文件?
又如果有两个.lib文件中有两个相同的函数实现,同样的参数,同样的返回值。那编译器怎么知道该调用正确的函数实现?
...全文
41
11
打赏
收藏
关于.h与.lib的关系的问题!!
问题是这样的: 如果有N个.h文件的实现都是靠M个.lib文件来完成的话,那在Link的时候,编译器怎么知道该调用哪个.lib文件? 又如果有两个.lib文件中有两个相同的函数实现,同样的参数,同样的返回值。那编译器怎么知道该调用正确的函数实现?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wozhy
2002-10-01
打赏
举报
回复
我有点理解了!谢谢!
core
2002-09-30
打赏
举报
回复
.h是用来编译的,.lib是用来连接的,它们之间可以没有关系。
dsangvei
2002-09-30
打赏
举报
回复
.H中申明了外部函数和数据的定义,.LIB中是它们的实现。
LIB中可以有与其它LIB(或OBJ)完全相同的函数,但你在连接的时候必须
指定其中的一个。但是,在很多的编译器中都会将其它的忽略过去。
alexxing
2002-09-30
打赏
举报
回复
1. 如果有N个.h文件的实现都是靠M个.lib文件来完成的话,那在Link的时候,编译器怎么知道该调用哪个.lib文件?
所有 .lib 的代码、数据最后都被连接为一个整体。所有局部数据(static, local)互不干扰,所有全局数据的符号标识(符号名,可能还要加上相关的 class,namespace 的前缀,重载函数也要加上一定的附加部分进行区别)都是唯一的。
连接器的连接工作是以具体符号为基本处理单位,而不是 .lib
2. 又如果有两个.lib文件中有两个相同的函数实现,同样的参数,同样的返回值。那编译器怎么知道该调用正确的函数实现?
首先,不是“编译器”该怎么知道,而是“连接器”该怎么知道
其次,这两个函数中至少有一个应该是 static,否则就是连接错误,根本无法完成连接
hellomartin
2002-09-30
打赏
举报
回复
bushihendong
runjiu
2002-09-30
打赏
举报
回复
.h中有大量的数据结构说明和宏替换,真正在lib中调用的函数一般用_decl说明了,看一看.h文件就可以知道.连接时引用的.lib根据模式不同只调用一个模式的文件,并且如果要引用另外的.lib文件中的函数,也必须声明,否则会在编译时出现找不到函数的错误.
chrix
2002-09-29
打赏
举报
回复
//如果有N个.h文件的实现都是靠M个.lib文件来完成的话,那在Link的时候,编译器怎么知道该调用哪个.lib文件?
编译器按照h里面的申明来连接。
liubear
2002-09-29
打赏
举报
回复
>>>>如果有N个.h文件的实现都是靠M个.lib文件来完成的话,那在Link的时候,编译器怎么知道该调用哪个.lib文件?
编译器知道连接。
>>>>又如果有两个.lib文件中有两个相同的函数实现,同样的参数,同样的返回值。那编译器怎么知道该调用正确的函数实现?
编译器在Link时会报错,此时必须屏蔽掉某一个库。
zfluo
2002-09-29
打赏
举报
回复
如果一个相同的函数在不同的.lib中重复的话,
编译器会报错的,MFC就有多线程
和单线程的两套lib,你编译的时候必须指定用
那一套
sjd163
2002-09-29
打赏
举报
回复
1.可能通过识别.h的定义去寻找.lib中的关键字,并完成Link。
2. 如果一个相同的函数在不同的.lib中可能找到一个就结束了。
playguy
2002-09-29
打赏
举报
回复
根据模块句柄与函数名来调用的,所以在同一模块中不能有相同的函数。
欢迎访问小弟的网站:
http://www.aslike.net
.h头文件、 .
lib
库文件、 .dll动态链接库文件的
关系
之前最头疼的
问题
,一定要查清楚。1,.h是函数声明的接口,仅仅是接口 2,.dll中有函数的可执行代码 3,.
lib
分两种情况,分别对应静态链接(
lib
是静态库)与动态链接(动态链接的导入库import
lib
rary)然后:如果程序是静态链接,那么只需要h与
lib
文件,
lib
文件中含有函数代码;如果是动态链接,那么
lib
作为导入库,其中没有函数实现代码,只有函数的地址表等信息,方便在dll文件
.h文件,.c文件,.
lib
文件和dll的区别
大家都知道,.h文件是头文件,用来声明变量,函数的,而对应(其实你也不一定要对应,头文件写对就行,主要方便整理)的.c文件是函数,变量的定义。简单易懂的
关系
。那其他2个呢。 .
lib
文件是二进制文件,是一个或者数个.c文件的集合,也就是说他有.c文件的作用:定义。那么,.c文件就有的功能为什么还要弄成.
lib
文件呢,使用还麻烦,要#pragmacomment(
lib
,"xx
Lib
.
lib
");...
.h(头文件)、.
lib
(库文件)和.ddl(动态链接库文件)三者的作用与联系
.h(头文件)是编译时必须的,
lib
(库文件)是链接时需要的,dll(动态链接库文件)是运行时需要的。 附加依赖项的是.
lib
不是.dll,若生成了DLL,则肯定也生成
LIB
文件。如果要完成源代码的编译和链接,有头文件和
lib
就够了。如果也使动态连接的程序运行起来,有dll就够了(放在Debug文件夹里)。在开发和调试阶段,当然最好都有。 .h .
lib
.dll三者的
关系
如下: .h文件作用是:声明函数接口 .dll文件作用是: 函数可执行代码 当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知
C/C++::浅谈.obj .exe .dll .
lib
关系
&& .o .a .so
关系
浅谈.
lib
.dll .obj
关系
&& .a .so .o
关系
一、.obj .exe .dll .
lib
(1).obj 目标文件,相当于源代码对应的二进制文件。 obj文件就是用.c .cpp .h文件经过编译器编译之后生成的目标文件。 (2).exe 将程序运行所需要的全部.obj文件连接起来,即形成.exe文件。 也就是windows下的可执行文件。 o...
.h(头文件) .
lib
(库文件) .dll(动态链接库文件) 之间的
关系
和作用的区分
lib
是静态库,dll一般是动态链接库(也有可能是别的) 比如要编译个exe,
lib
在编译的时候就会被编译到exe里,作为程序的一部分 而dll是不被编译进去,是运行的时候才调入的(可能是exe刚运行就调入,也可能运行了一半才调入) 用法,
lib
需要个.
lib
文件和一个.h文件,程序正常使用.h的函数,在链接选项里加入.
lib
文件就okdll用法有2种,一是 .h + .
lib
+ .dll的,用...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章