Jak wydrukować listę symboli wyeksportowanych z biblioteki dynamicznej


121

Więc starałem się zmusić biblioteki dynamiczne do pracy w moim projekcie XCode pod Mac OS X. Jak dotąd bez radości.

Jestem w stanie załadować plik dylib, ale kiedy wywołuję dlsym, aby uzyskać wskaźnik funkcji, zwraca 0, a dlerror mówi, że symbol nie został znaleziony.

Zastanawiam się więc, czy istnieje prosty sposób na wyświetlenie symboli wyeksportowanych z pliku dylib. Wszelkie pomysły byłyby świetne.

Odpowiedzi:


152

mężczyzna 1 nm

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

Na przykład:

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

2
Pod OS X Leopard (10.5, tak, wiem ...) powinieneś używać nm -gu, tzn. -uOpcja jest małymi literami.
Laryx Decidua

4
man 1 nm jest samowystarczalny i będzie kontynuował pracę po zmianie wiersza poleceń: p
MK.

9
@MK. man 1 nmwymienia wiele rzeczy, które można zrobić z nm. Ponownie, jest to zewnętrzny zasób, który można przeczytać w celu znalezienia rozwiązania, ale nie samo rozwiązanie żądanego „prostego sposobu na wyeksportowanie symboli, które są eksportowane z pliku dylib” . „ nm -gU ….dylib” Jest jednak.
Slipp D. Thompson

59

Użyj otool :

otool -TV your.dylib

LUB

nm -g your.dylib

4
Na nowych MacOS, otool -T pokaże otool: -T functionality obsoleteużycie objdump -t
joseph.smeng

Chociaż prawdą jest, że otool -Traporty functionality obsoletew nowszym OS X, prawdą jest również, że (w przypadku bibliotek dynamicznych) objdump -tbędą raportowaćThe file was not recognized as a valid object file.
TML


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.