Linux 中printf函数的链接问题

anglo1990 发布于 2013/05/11 13:05
阅读 650
收藏 1

在程序员的自我修养这本书上看的,在linux中c语言的静态库libc位于/usr/lib/ibc.a 中,我安装的系统是red hat 的,怎么没有找到libc.a这个静态文件,用 find的命令找了一下,是在arm-linux下的文件中,我在cent os版本中在/usr/lib/ 中能找到ibc.a,这是怎么回事?

还有就是这两天一直在研究动态库 静态库,书上写的是printf函数在libc.a静态库中定义,用$objdump -t libc.a命令查看,printf函数被定义在了“printf.o”这个目标文件中。我想问的是既然printf函数被定义在了“printf.o”这个目标文件中那我们调用printf时候不就是静态链接了吗?但是当我们在写一个C程序里面含有printf的时候,当我用nm命令去查看目标文件的时候,发现printf仍然没有被定义,这是怎么回事?这不是在程序运行时,做动态链接了吗? 纠结好几天了,希望高手回答一下,谢谢

加载中
0
i
ibmo
编译生成可执行文件的时候,默认是使用动态链接的,根本不会静态链接pritf.o 文件。
0
中山野鬼
中山野鬼
注意潜规则,哈,你懂得。。
anglo1990
anglo1990
虽然编译时可以使用libc.so来编译,但实际上libc.so中代码指向仍然会定位到libc.a ,我可以这样理解吗?这个问题想了好长时间了,谢谢
返回顶部
顶部