2012-07-25 9 views
5

Ich benutze GCC Compiler und Ubuntu 12.04 OS. Ich möchte wissen, wo finde ich die Objektdatei und in welchem ​​Verzeichnis, das die Definition der printf-Funktion enthält. Wieder suche ich nicht nach der Headerdatei, die den Prototyp enthält, sondern nach der Objektdatei, die die eigentliche Definition enthält.Wo finde ich die Objektdatei, die die Definition der printf-Funktion enthält?

+1

Sein Teil von 'libc'. was genau suchst du? Wie suchen Sie nach der Definition in der Quelle oder der Bibliothek, die sie auf Ihrem Computer enthält? –

+0

Ich suche nach der Objektdatei unter der libc, die die Codedefinition von printf enthält. – Ananda

Antwort

4

Suchen Sie nach der Objektdatei oder der Quelldatei?

Die O-Objektdatei wird in einer Bibliothek gespeichert, libc.so. In den meisten Linux-Distributionen befindet sich diese Datei unter /lib/libc.so. Unter Ubuntu 11 und 12 wurde als Teil von multiarch support der Inhalt von/lib in /lib/i386-linux-gnu und /lib/x86_64-linux-gnu verschoben.

Sie können die einzelne Objektdatei erhalten, indem den ar (Archiv) Befehl verwenden, um die Bibliothek zu erstellen mit der x (Auszug) Option verwendet: obwohl

ar x libc.a stdio.o 

Das ist nicht sehr nützlich scheint, , also ich vermute, dass Sie eigentlich die Quelldatei und nicht die Objektdatei wollen. Dafür würden Sie das glibc package installieren, das printf.c enthält (das vprintf aufruft, das vfprintf aufruft, das den tatsächlichen Code für printf enthält).

Diese Quelle kann browsed on Launchpad sein. Es ist ziemlich kompliziert und erstreckt sich über mehr als 2000 Codezeilen.

+0

Ich habe 3 spezifische Frage in Bezug auf diese, dh (1) mit dem AR-Befehl, Liste alle Objektdateien, die in libC 2. Unter diesen Objektdateien, was ist die Datei, die die Definition der printf enthält() Mit welchem ​​Befehl hast du das herausgefunden? 3. Ist es möglich, die Größe der endgültigen ausführbaren Datei zu reduzieren, indem Sie nur die Definitionen einbeziehen, die tatsächlich und in dem Programm benötigt/gebraucht werden? Wenn das so ist, wie. – Ananda

+0

Seufzer. Sind das Hausaufgaben? (1) man ar, (2) 'objdump + einige Optionen | grep printf' (3) Siehe GCC-Dokumentation und versuchen Sie es. –

0

fand ich die genaue Antwort auf ersten beiden Fragen von mir -

  1. alle Objektdateien in aufzulisten libc wir folgende Befehle zur Verfügung:

    x86_64-System: AR $ -t/usr/lib/x86_64-linux-gnu/libc.a

    i386 System: $ ar -t /usr/lib/i386-linux-gnu/libc.a

  2. die Datei-Objekt Um herauszufinden, enthalten printf Spaß Führen Sie diesen Befehl unter/usr/lib/x86_64-linux-gnu/usr/lib/i386-linux-gnu oder dem folgenden Verzeichnis aus:

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

  3. Noch arbeiten, um die richtige Antwort zu finden.

+1

Ja, 'nm' ist eine gute Alternative zu 'objdump', wenn Sie mit Bibliotheken arbeiten. –