2012-07-25 117 views
5

我使用gcc編譯器和Ubuntu 12.04操作系統。我想知道哪裏可以找到目標文件,以及哪個目錄下包含printf函數的定義。再次,我不尋找包含原型但包含實際定義的目標文件的頭文件。我在哪裏可以找到包含printf函數定義的目標文件?

+1

它是'libc'的一部分。你到底在找什麼?如果你正在尋找源代碼或庫中包含它的機器中的定義? – 2012-07-25 16:26:56

+0

我正在尋找包含printf代碼定義的libc下的目標文件。 – Ananda 2012-07-26 04:27:35

回答

4

你在尋找目標文件還是源文件?

.o目標文件存儲在庫中,libc.so。在大多數Linux發行版中,該文件位於/lib/libc.so。在Ubuntu 11和12上,作爲multiarch support的一部分,/ lib的內容已被移至/lib/i386-linux-gnu/lib/x86_64-linux-gnu

您可以通過使用被用來創建與x(摘錄)選項庫中的ar(存檔)命令獲取單個對象文件:

ar x libc.a stdio.o 

這似乎不是很有用,但,所以我猜你確實需要源文件而不是目標文件。爲此,您將安裝glibc package,其中包含printf.c(它調用vprintf,它調用vfprintf,其中包含printf的實際代碼)。

此源碼可能爲browsed on Launchpad。它非常複雜,並且延伸超過2000行代碼。

+0

我有3個具體的問題關於這個即(1)使用ar命令,列出libC中存在的所有目標文件 2.在這些目標文件中,什麼是包含printf定義的文件()?你用什麼命令找出來的? 3.是否可以通過僅包含程序中實際需要/使用的那些定義來減小最終可執行文件的大小?如果是這樣,如何。 – Ananda 2012-07-26 04:39:13

+0

感嘆。這是功課嗎? (1)man ar,(2)'objdump + some options | grep printf'(3)參見GCC文檔並試用它。 – 2012-07-26 10:23:05

0

我找到確切的答案我的前兩個問題 -

  1. 要列出所有目標文件提出了libc中,我們使用下面的命令:

    x86_64系統上:$ AR -t在/ usr/LIB/x86_64的-Linux的GNU/libc.a的

    i386的系統:$ AR -t /usr/lib/i386-linux-gnu/libc.a

  2. 要找出哪些對象文件包含printf的樂趣ction在/ usr/lib/x86_64-linux-gnu/usr/lib/i386-linux-gnu或目錄下運行此命令:

    $ nm -o libc.a | grep -w printf

  3. 仍在努力尋找正確的答案。

+1

是的,在處理庫時,'nm'是'objdump'的一個很好的選擇。 – 2012-07-26 13:42:32

相關問題