2012-01-25 7 views

Respuesta

9

Si no quitó los símbolos, puede usar nm para ver los nombres de los archivos de objeto (.o).

$ nm foo.a 
foo.a(objectFile1.o): 
0000000000000000 T _function1 
foo.a(objectFile2.o): 
0000000000000000 T _function2 

Esta salida será diferente en los diferentes sistemas operativos. Por ejemplo, aquí está la salida de los símbolos dentro libz.a en un sistema Ubuntu:

$ nm libz.a | grep ".o:" 
adler32.o: 
compress.o: 
crc32.o: 
gzio.o: 
uncompr.o: 
deflate.o: 
trees.o: 
zutil.o: 
inflate.o: 
infback.o: 
inftrees.o: 
inffast.o: 

Cada uno de los mayores de 12 .o archivos eran unidades de traducción en el código original, compilado con la opción -c a gcc. Usé grep para ignorar los innumerables símbolos definidos y referenciados en cada uno de los archivos objeto. Después de la compilación, estos archivos de objetos se combinaron en una biblioteca estática con ar.

ar también se pueden extraer los archivos del objeto. En la misma libz.a:

$ ar xv libz.a 
x - adler32.o 
x - compress.o 
x - crc32.o 
x - gzio.o 
x - uncompr.o 
x - deflate.o 
x - trees.o 
x - zutil.o 
x - inflate.o 
x - infback.o 
x - inftrees.o 
x - inffast.o 

La opción es para x extracto y v es prolijo, que imprime el nombre del archivo de objeto a medida que se extrae.

+0

Esta lista también incluye todos los objetos utilizados dentro del archivo. ¿Cuál es el comando para imprimir solo los archivos dentro de .a. Por ejemplo, los archivos .o dentro de .a. – Abhinav

+0

Eso es exactamente lo que 'nm' te dice. Por ejemplo, en mi máquina Ubuntu: 'nm /usr/lib/libz.a | grep ".o:" 'regresa con 12 archivos' .o' que comprenden 'libz.a'. ¿Es esto lo que quieres decir? – greg

+0

Sí, tienes razón. Pero usando nm my.a | grep ".o:" Me devuelve el método llama a algunos de los archivos .o internos, pero no enumera todos los archivos .o. ¿Estoy haciendo algo mal aquí? – Abhinav

0

Esto funcionaba con el siguiente comando: nm <> | grep ".o" | sed "s /. (// g" | sed "s /). // g" | uniq

2

creo que sería más fácil de usar ar para (archivos manipulación) lo que se supone

ar t foo.a 

De página del manual:

-t lista de los archivos especificados en el orden en que aparecen en el archivo, cada uno en una línea separada. Si no se especifican archivos, se enumeran todos los archivos en el archivo.

man 1 ar para obtener más información.

Cuestiones relacionadas