2012-07-25 13 views
5

Estoy usando el compilador gcc y el sistema operativo ubuntu 12.04. Quiero saber dónde puedo encontrar el archivo objeto y bajo qué directorio, que contiene la definición de función printf. De nuevo, no estoy buscando el archivo de encabezado que contiene el prototipo, sino el archivo de objeto que contiene la definición real.¿Dónde puedo encontrar el archivo objeto que contiene la definición de función printf?

+1

Su parte de 'libc'. ¿Que es exactamente lo que está buscando? ¿Cómo está buscando la definición en la fuente o la biblioteca que la contiene en su máquina? –

+0

Estoy buscando el archivo objeto bajo la libc que contiene la definición de código de printf. – Ananda

Respuesta

4

¿Está buscando el archivo objeto o el archivo fuente?

El archivo de objeto .o se almacena dentro de una biblioteca, libc.so. En la mayoría de las distribuciones de Linux, este archivo se encuentra en /lib/libc.so. En Ubuntu 11 y 12, como parte de multiarch support, los contenidos de/lib se han movido a /lib/i386-linux-gnu y /lib/x86_64-linux-gnu.

Puede obtener el archivo objeto individual con el comando ar (archivo) que se utilizó para crear la biblioteca con la opción x (extracto):

ar x libc.a stdio.o 

Esto no parece muy útil, aunque , entonces supongo que realmente quiere el archivo fuente y no el archivo objeto. Para eso, instalaría el glibc package, que contiene printf.c (que llama a vprintf, que llama a vfprintf, que contiene el código real para printf).

Esta fuente puede ser browsed on Launchpad. Es bastante complicado y abarca más de 2000 líneas de código.

+0

Tengo 3 preguntas específicas con respecto a esto es decir (1) Usando el comando ar, liste todos los archivos de objeto que están presentes en libC 2. Entre esos archivos de objeto, ¿cuál es el archivo que contiene la definición de printf()? ¿Cuál es el comando que usaste para descubrirlo? 3. ¿Es posible reducir el tamaño del archivo ejecutable final al incluir solo las definiciones que realmente se necesitan/utilizan en el programa? Si es así, cómo. – Ananda

+0

suspiro. ¿Es esta tarea? (1) man ar, (2) 'objdump + algunas opciones | grep printf' (3) Consulte la documentación de GCC y pruébelo. –

0

he encontrado la respuesta exacta a dos primeras preguntas de la mina -

  1. Para una lista de todos los archivos objeto presente en libc utilizamos comandos siguientes:

    sistema x86_64: $ ar -t/usr/lib/x86_64-linux-gnu/libc.a

    i386: ar $ -t diversión /usr/lib/i386-linux-gnu/libc.a

  2. Para averiguar cuál es el objeto de archivo contienen printf ction ejecutar este comando en/usr/lib/x86_64-linux-gnu/usr/lib/i386-linux-gnu o directorio:

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

  3. Sigue trabajando para encontrar la respuesta correcta.

+1

Sí, 'nm' es una buena alternativa a' objdump' cuando se trata de bibliotecas. –

Cuestiones relacionadas