用静态库链接program时具体链接多少内容?
program调用static library中的一个function foo()
但static library的.a文件包括f1.o, f2.o, f3.o,其中f2.o包括了foo()和bar()
在链接program时,.a文件里面的哪些代码被放进了输出可执行文件中了?
是foo(),还是f2.o,还是.a全部?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
foo()............................
这个取决于编译器。首先肯定不是.a全部连接的,这个可以肯定。对于GCC一般是以.o为单位的,即你使用了foo(),那么所在.o会全部被连接进目标程序中。VC6.0则是基于函数连接的,即只连接所使用函数的目标代码,所以在VC6.0中可以很方便地自己“重载”库函数,而GCC就会导致冲突。
这个实际上自己做一些程序很容易测试出来的,用编译器加上objdump静态分析一下就很清楚了。
一般来说链接的时候是以.o为单位的;
复制代码
[ 本帖最后由 cjaizss 于 2008-9-6 14:57 编辑 ]