Cómo imprimir una lista de símbolos exportados desde una biblioteca dinámica

121

Así que he intentado que las bibliotecas dinámicas funcionen en mi proyecto XCode en Mac OS X. Hasta ahora no me ha gustado.

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

Entonces, me pregunto si hay una forma sencilla de enumerar los símbolos que se exportan desde un archivo dylib. Cualquier idea sería genial.

Gerald
fuente

Respuestas:

152

hombre 1 nm

https://web.archive.org/web/20160316222941/https://developer.apple.com/library/mac/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
MK.
fuente
2
Bajo OS X Leopard (10.5, sí, lo sé ...) debería usar nm -gu, es decir, la -uopción está en minúsculas.
Laryx Decidua
4
man 1 nm es autónomo y seguirá funcionando cuando cambie la línea de comandos: p
MK.
9
@MK. man 1 nmenumera muchas cosas que se pueden hacer con nm. Una vez más, es un recurso externo que uno puede leer para descubrir una solución, pero no una solución en sí misma al solicitado "una forma sencilla de enumerar los símbolos que se exportan desde un archivo dylib" . " nm -gU ….dylib" Es, sin embargo.
Slipp D. Thompson
59

Utilice otool :

otool -TV your.dylib

O

nm -g your.dylib
linuxbuild
fuente
4
En nuevos macOS, otool -T mostrará otool: -T functionality obsoleteuse objdump -t
joseph.smeng
Si bien es cierto que los otool -Tinformes functionality obsoleteen OS X más reciente, también es cierto que (para las bibliotecas dinámicas) objdump -tinformaránThe file was not recognized as a valid object file.
TML
14

Utilizar nm -a your.dylib

Imprimirá todos los símbolos, incluidos los globales.

Omkar Ramtekkar
fuente
0

Utilice Mach-OView para ver todos los símbolos en dylib

https://sourceforge.net/projects/machoview/

Sahil Doshi
fuente
Estaba emocionado de haberme enterado de esta GUI, pero se bloqueó después de cargar un dylib. Estoy usando macOS Mojave.
chrisdembia