2011-06-05 24 views
13

Estoy tratando de encontrar la biblioteca C estándar en Mac OS X. He intentado rutas como: "/usr/lib/libc.a" o "/usr/lib/libm.a", pero no hay tal archivos en el sistema. ¿Podría decirme dónde encontrarlo?¿Dónde está la biblioteca C estándar en Mac OS X?

Luego utiliza Terminal en una máquina Linux y ejecutar tales comandos:

ar t /usr/lib/libc.a 

Devuelve una lista de archivos y .o esos archivos .o son como éstos:

svc.o 
xdr.o 
... 

¿Cuáles son el significado de estos archivos? dónde encontrarlos?

Respuesta

15

La biblioteca estándar es parte de libSystem.dylib en OS X.

+0

Parece que '/ usr/lib/libSystem.dylib' es sólo un enlace simbólico a/usr/lib/libSystem.B.dylib', a partir de 10.12. – GDP2

+0

@ GDP2: Sí, '.B' es la versión actual; Sin embargo, los scripts de enlace deberían * normalmente * vincularse contra 'libSystem.dylib' (' -lSystem'). –

+0

Sí, eso probablemente ayude con la compatibilidad con versiones anteriores y tal. – GDP2

6

Parece que es:

/usr/lib/libSystem.B.dylib 

en mi máquina (MacOS X 10.6.7).

3

Para responder a la otra mitad de su pregunta, OS X generalmente no utiliza bibliotecas estáticas (.a). Como tal, no hay libc.a (o libSystem.a) en OS X.

3

Para responder a su segunda pregunta: las bibliotecas estáticas se guardan en los archivos, de ahí el .a. Como tales, son solo contenedores para un grupo de archivos, como ZIP, TAR, RAR, etc., menos cualquier compresión. Los archivos enumerados por ar (soportes para el archivo ) son los archivos originales que se empaquetan en el archivo. Puede descomprimirlo y obtener los archivos originales.

Las bibliotecas estáticas tienen un marcado contraste con las bibliotecas dinámicas. El vinculador extrae los contenidos de una biblioteca estática e los incluye en su programa al vincularlos, como si fueran solo resultados de otras etapas de compilación del proceso de compilación de su programa.

Bibliotecas dinámicas OTOH no son solo archivos de archivos objeto, sino que son ejecutables vinculados por sí mismo y el enlazador dinámico los mapea en el espacio de direcciones de procesos de vinculación y ajusta las tablas de símbolos para que coincidan con la dirección asignada.

1

Actualmente existe en /usr/lib/system/libsystem_c.dylib.

Puede comprobar que con: $ nm -gU /usr/lib/system/libsystem_c.dylib