我对c语言中的stdio.h有疑问。
好 - 这只包含标准输入和输出流的函数原型。 但是这个标准的输入和输出必须有一个libfile(objectfile),对吗?
但它的名称是什么,它位于Linux(ubuntu)的哪个文件夹中?
答案 0 :(得分:2)
如果我编译一个简单的hello world C程序,我会得到这个:
% ldd easy
linux-vdso.so.1 => (0x00007fffcc9fe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4a90eb6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4a91299000)
为什么需要libc
?
% nm easy
...
000000000040052d T main
U printf@@GLIBC_2.2.5
符号printf
由glibc
提供。 nm
显示该对象正在提供printf
符号:
% nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep printf
...
00000000000542f0 T printf
0000000000109dc0 T __printf_chk
000000000004f1d0 T __printf_fp
或者,您可以要求ldd
打印调试信息:
% LD_DEBUG=bindings ./easy 2>&1 | grep printf
17922: binding file ./easy [0] to /lib/x86_64-linux-gnu/libc.so.6 [0]:\
normal symbol `printf' [GLIBC_2.2.5]