Sto usando il compilatore gcc e il sistema operativo Ubuntu 12.04. Voglio sapere dove posso trovare il file dell'oggetto e sotto quale directory, che contiene la definizione della funzione printf. Di nuovo non sto cercando il file di intestazione che contiene il prototipo ma il file oggetto che contiene la definizione attuale.Dove posso trovare il file oggetto che contiene la definizione della funzione printf?
risposta
Stai cercando il file oggetto o il file sorgente?
Il file oggetto .o è archiviato in una libreria, libc.so
. Nella maggior parte delle distro Linux, questo file si trova a /lib/libc.so
. Su Ubuntu 11 e 12, come parte di multiarch support, il contenuto di/lib è stato spostato su /lib/i386-linux-gnu
e /lib/x86_64-linux-gnu
.
È possibile ottenere il file singolo oggetto utilizzando il comando ar
(archivio) che è stato utilizzato per creare la libreria con l'opzione di x
(estratto):
ar x libc.a stdio.o
Questo non sembra molto utile, anche se quindi suppongo che tu voglia effettivamente il file sorgente e non il file oggetto. Per fare ciò installate lo glibc package, che contiene printf.c (che chiama vprintf, che chiama vfprintf, che contiene il codice effettivo per printf).
Questa origine può essere browsed on Launchpad. È piuttosto complicato e si estende ben oltre 2000 linee di codice.
Ho 3 domande specifiche riguardo a questo esempio (1) Usando il comando ar, elenca tutti i file oggetto presenti in libC 2. Tra questi file oggetto, qual è il file che contiene la definizione della printf()? Qual è il comando che hai usato per scoprirlo? 3. È possibile ridurre la dimensione del file eseguibile finale includendo solo le definizioni effettivamente necessarie e/utilizzate nel programma? Se é cosi, come. – Ananda
Sigh. Sono questi compiti? (1) man ar, (2) 'objdump + alcune opzioni | grep printf' (3) Vedi la documentazione GCC e provalo. –
ho trovato la risposta esatta alla prime due questioni di mine -
Per elencare tutti i file oggetto presente nella libc usiamo seguenti comandi:
sistema x86_64: $ ar -t/usr/lib/x86_64-linux-gnu/libc.a
sistema i386: $ ar -t divertimento /usr/lib/i386-linux-gnu/libc.a
Per scoprire quale oggetto di file contengono a printf ction esegui questo comando in/usr/lib/x86_64-linux-gnu/usr/lib/i386-linux-gnu o nella directory:
$ nm -o libc.a | grep -w printf
Ancora lavorando per trovare la risposta corretta.
Sì, 'nm' è una buona alternativa a' objdump' quando hai a che fare con le librerie. –
- 1. Trovare il file sorgente contenente definizione della funzione R
- 2. Dove posso trovare la definizione del formato cpanfile?
- 3. Dove posso trovare il 16F877A.h?
- 4. Trova la definizione completa della funzione all'interno del file oggetto condiviso C++
- 5. DBSet non contiene una definizione per Dove
- 6. Dove posso trovare il file applicationContext.xml di esempio
- 7. 'oggetto' non contiene una definizione per 'X'
- 8. Definizione della funzione o definizione della variabile?
- 9. Dove trovare la definizione completa di tipo off_t?
- 10. 'oggetto' non contiene una definizione per dinamico
- 11. Codice per la funzione printf in C
- 12. Che cosa contiene un file oggetto?
- 13. Dove posso trovare GACUtil?
- 14. Dove posso trovare ESAPI.properties?
- 15. Dove posso trovare la versione yii della mia app yii?
- 16. Dove posso trovare Mono.Cecil.Pdb.dll?
- 17. Dove posso trovare il file my.ini per windows mysql server?
- 18. Dove posso trovare il file di log MySQL in XAMPP
- 19. Dove posso trovare il modulo Opzione OCaml?
- 20. Dove posso trovare la fonte o l'algoritmo della funzione hash() di Python?
- 21. Chiamare la definizione della classe base della funzione membro virtuale con il puntatore di funzione
- 22. Dove posso trovare il pacchetto javax.media.opengl?
- 23. Dove posso trovare i file di configurazione di WebSphere?
- 24. Dove posso trovare il file application.exe.config nel mio progetto C#?
- 25. Dove posso trovare la libreria Microsoft.IdentityModel.Extensions.dll?
- 26. Dove posso trovare la documentazione di Hpricot?
- 27. Dove posso trovare la grammatica C# 3.0?
- 28. Dove posso trovare la documentazione di PythonMagick?
- 29. Dove posso trovare la classe Base64Encoder?
- 30. GCC definizione della funzione fastcall
Fa parte di 'libc'. Cosa stai cercando esattamente? Come stai cercando la definizione nel codice sorgente o nella libreria che la contiene sulla tua macchina? –
Sto cercando il file oggetto sotto la libc che contiene la definizione del codice di printf. – Ananda