2014-09-01 21 views
1

我有一個關於c語言stdio.h的問題。stdio.h - 什麼是libfile的名稱,我在哪裏可以找到它Linux

好吧 - 它只包含標準輸入和輸出流的函數原型。 但是這個標準輸入和輸出必須有一個libfile(objectfile),對吧?

但是它的名字和它在Linux(ubuntu)中的文件夾是什麼?

+1

它通常由libc實現。 – 2014-09-01 19:13:09

+0

這將是[C標準庫](https://en.wikipedia.org/wiki/C_standard_library)的一部分! [glibc](https://en.wikipedia.org/wiki/GNU_C_Library)在Linux中很常見。 – Ryan 2014-09-01 19:13:09

+0

不確定Ubuntu,但可能是'/ lib/libc *'和/或'/ lib64/libc *'。 – mafso 2014-09-01 19:14:56

回答

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 [email protected]@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] 
1

這要看你使用標準庫的實現,但如果你是主流並用gcc編譯,你可以找到一個庫的路徑用於鏈接

$ gcc -print-file-name=libc.so /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libc.so

考慮到您可以在系統中安裝多個實施。

相關問題