首页
社区
课程
招聘
[求助]关于C/C++静态库的链接方式
发表于: 2010-6-19 17:23 6747

[求助]关于C/C++静态库的链接方式

2010-6-19 17:23
6747
据我所知,C/C++的静态库(.lib)应该是由许多.obj组成的,而C/C++每个源文件(.c或.cpp)都会被编译为一个.obj文件,那么生成EXE时链接的基本单位是不是.obj呢?

假如我自定义了一个静态库,里面有许多函数,全部函数都写在同一个源文件里,那么编译时只会生成一个.obj文件,也就是说只有一个.obj文件加入了这个静态库;如果我再写个EXE调用了这个自定义静态库里的某个函数,那么是调用到的函数代码才被链接到EXE,还是所有位于同一个.obj文件里的函数都被链接到EXE呢?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
lib和obj文件虽然都是二进制函数集代码文件,但lib文件是lib文件,obj文件是obj文件,他们的格式和用途是不一样的,不能混为一谈。lib是属于被编译成二进制后的函数库文件,编译器在编译exe程序时,只会提取lib函数库中被调用的函数代码。而obj文件则被编译器编译为有一定的PE格式的二进制文件,也可以说是exe文件的雏体。obj文件里的所有函数代码都会被编译成exe文件。
2010-6-19 17:39
0
雪    币: 962
活跃值: (1681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
lib 和obj是一样的效果 看优化选项 realse 是只编译用到的代码 其它的代码会被link抛弃
2010-6-19 18:12
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
LIB是OBJ的集合,这没错,一般来说,OBJ中每个函数都会占用一个节,因此可以做到连接时只包括使用到的函数,没问题,而且,同一个OBJ中的函数链接到EXE/DLL文件中空间也不一定是连续的。可以说,LINK的基本单位是“节”。
2010-6-19 19:28
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果Lib里有一个类,这个类有许多成员函数,但是程序只调用了其中少数几个成员函数,那么链接到EXE是这个类的所有成员函数还是调用到的少数成员函数?
2010-6-24 13:03
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
应该不会连接所有函数,你看看exe中有没有包含所有的静态库函数,应该不会吧!
2010-6-24 14:57
0
游客
登录 | 注册 方可回帖
返回
//