关于.h与.lib的关系的问题!!

wozhy 2002-09-29 09:09:34
问题是这样的:
如果有N个.h文件的实现都是靠M个.lib文件来完成的话,那在Link的时候,编译器怎么知道该调用哪个.lib文件?
又如果有两个.lib文件中有两个相同的函数实现,同样的参数,同样的返回值。那编译器怎么知道该调用正确的函数实现?
...全文
41 11 打赏 收藏 转发到动态 举报
写回复
用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

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧