2010-12-22 9 views
93

He intentado hacer que las bibliotecas dinámicas funcionen en mi proyecto XCode en Mac OS X. Hasta ahora no me ha gustado.Cómo imprimir una lista de símbolos exportados desde una biblioteca dinámica

Puedo cargar el archivo dylib, pero cuando llamo a dlsym para obtener el puntero a la función, devuelve 0 y dlerror dice que el símbolo no se encuentra.

Así que me pregunto si hay una manera simple de enumerar los símbolos que se exportan desde un archivo dylib. Cualquier idea sería genial.

Respuesta

106

hombre 1 nm

https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/nm.1.html

Por ejemplo:

nm -gU /usr/local/Cellar/cairo/1.12.16/lib/cairo/libcairo-trace.0.dylib 
+0

En OS X Leopard (10.5, sí, sepa ...) debe usar 'nm -gu', es decir, la opción' -u' es minúscula. –

+3

man 1 nm es autónomo y continuará funcionando cuando la línea de comandos cambie: p –

+4

@MK. 'man 1 nm' enumera muchas cosas que uno puede hacer con nm. De nuevo, se trata de un recurso externo que se puede leer para descubrir una solución, pero no una solución en sí misma para "la forma más sencilla de listar los símbolos que se exportan desde un archivo dylib" _. "' Nm -gU ... .dylib' "es, sin embargo. –

49

Uso otool:

otool -TV your.dylib 

O

nm -g your.dylib 
+0

En nuevas macOS, otool -T mostrará 'otool: -T funcionalidad obsoleta' use objdump -t –

+0

Si bien es cierto que' otool -T' informa 'funcionalidad obsoleta' en OS X más nuevo, también es cierto que (para dinámicas libraries) 'objdump -t' informará' El archivo no fue reconocido como un archivo de objeto válido. – TML

11

Uso nm -a your.dylib

Se imprimirá todos los símbolos incluidos globales

Cuestiones relacionadas