Como imprimir uma lista de símbolos exportados de uma biblioteca dinâmica

121

Então, tenho tentado fazer com que as bibliotecas dinâmicas funcionem em meu projeto XCode no Mac OS X. Até agora, nenhuma alegria.

Consigo carregar o arquivo dylib, mas quando chamo dlsym para obter o ponteiro da função, ele retorna 0 e dlerror diz que o símbolo não foi encontrado.

Portanto, gostaria de saber se existe uma maneira simples de listar os símbolos que são exportados de um arquivo dylib. Qualquer ideia seria ótima.

Gerald
fonte

Respostas:

152

homem 1 nm

https://web.archive.org/web/20160316222941/https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/nm.1.html

Por exemplo:

nm -gU /usr/local/Cellar/cairo/1.12.16/lib/cairo/libcairo-trace.0.dylib
MK.
fonte
2
No OS X Leopard (10.5, sim, eu sei ...) você deve usar nm -gu, ou seja, a -uopção está em minúsculas.
Laryx Decidua
4
man 1 nm é independente e continuará trabalhando quando a linha de comando mudar: p
MK.
9
@MK. man 1 nmlista muitas coisas que podem ser feitas com nm. Novamente, é um recurso externo que pode ser lido para descobrir uma solução, mas não uma solução em si para o solicitado “uma maneira simples de listar os símbolos que são exportados de um arquivo dylib” . “ nm -gU ….dylib” É, no entanto.
Slipp D. Thompson
59

Use otool :

otool -TV your.dylib

OU

nm -g your.dylib
linuxbuild
fonte
4
No novo macOS, otool -T mostrará otool: -T functionality obsoleteuse objdump -t
joseph.smeng
Embora seja verdade que os otool -Trelatórios functionality obsoleteno OS X mais recente, também é verdade que (para bibliotecas dinâmicas) objdump -tirá relatarThe file was not recognized as a valid object file.
TML
14

Usar nm -a your.dylib

Irá imprimir todos os símbolos, incluindo globais

Omkar Ramtekkar
fonte
0

Use Mach-OView para ver todos os símbolos em dylib

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

Sahil Doshi
fonte
Fiquei animado por ter aprendido sobre esta GUI, mas travou para mim depois que carreguei um dylib. Estou usando o macOS Mojave.
chrisdembia