Come si specificano le funzioni disponibili, ecc contenuti in una libreria compilata?
Domanda
Come faccio a determinare se esiste una funzione all'interno di una libreria, o un elenco delle funzioni in una libreria compilata?
Soluzione
È possibile utilizzare il nm comando per elencare i simboli in statica librerie.
nm -g -C <libMylib.a>
Altri suggerimenti
Per binari ELF, è possibile utilizzare readelf:
readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
-s
: i simboli della lista
-W
: non tagliare i nomi troppo lunghi
Il comando awk poi filtrare tutte le funzioni, e C ++ filt li unmangle. Ciò significa che li convertirà da una schema di denominazione interna in modo che siano visualizzati in forma leggibile. Produce nomi simili a questo (tratto da boost.filesystem lib):
285: 0000bef0 91 FUNC WEAK DEFAULT 11 boost::exception::~exception()
Senza c ++ filt, il nome viene visualizzato come _ZN5boost9exceptionD0Ev
Per gli strumenti di Microsoft, "link /dump /symbols <filename>
" vi darà i dettagli cruenti. Probabilmente ci sono altri modi (o opzioni), a rendere più facile da leggere messa in vendita.
Sotto Linux / Unix è possibile utilizzare objdump -T
per elencare i simboli esportati contenuti in un determinato oggetto. In Windows c'è dumpbin
(IIRC dumpbin /exports
). Si noti che i nomi delle funzioni C ++ sono alterati in modo da consentire sovraccarichi.
EDIT: dopo aver visto di codelogic anwser mi sono ricordato che objdump capisce anche -C per eseguire de-mutilazione.
utilizzare questo comando:
objdump -t "your-library"
Sarà stampare più di quanto si vuole - non solo funzionare i nomi, ma l'intera tabella dei simboli. Controllare i vari attributi dei simboli si ottiene, e sarete in grado di risolvere le funzioni di variabili e cose.