Bagaimana cara melihat daftar fungsi yang diekspor oleh perpustakaan bersama Linux?


Jawaban:


314

Yang Anda butuhkan adalah nmdan -Dopsinya:

$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
         U atanf
         U calloc
.
.
.

Sumbol yang diekspor ditunjukkan oleh a T. Simbol yang diperlukan yang harus dimuat dari objek bersama lainnya memiliki a U. Perhatikan bahwa tabel simbol tidak hanya menyertakan fungsi, tetapi juga mengekspor variabel.

Lihat nm halaman manual untuk informasi lebih lanjut.


18
Atau jika Anda hanya ingin melihat simbol yang diekspor, tambahkan bendera "--defined-only". mis: "nm -D --defined-only /lib/libtest.so"
Shervin Emami

3
Di Mac OS X gunakan saja nmtanpa -Dflag.
JPaget


8

Pada MAC, Anda perlu menggunakan nm *.o | c++filt, karena tidak ada -Copsi di nm.


1

Di antara alat-alat lain yang telah disebutkan Anda dapat menggunakan juga readelf( manual ). Ini mirip dengan objdumptetapi lebih detail. Lihat ini untuk penjelasan perbedaannya.

$ readelf -sW /lib/liblzma.so.5 |head -n10

Symbol table '.dynsym' contains 128 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000     0 FUNC    GLOBAL DEFAULT  UND pthread_mutex_unlock@GLIBC_2.0 (4)
     2: 00000000     0 FUNC    GLOBAL DEFAULT  UND pthread_mutex_destroy@GLIBC_2.0 (4)
     3: 00000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTable
     4: 00000000     0 FUNC    GLOBAL DEFAULT  UND memmove@GLIBC_2.0 (5)
     5: 00000000     0 FUNC    GLOBAL DEFAULT  UND free@GLIBC_2.0 (5)
     6: 00000000     0 FUNC    GLOBAL DEFAULT  UND memcpy@GLIBC_2.0 (5)

Bagaimana saya bisa menemukan simbol yang diekspor dengan menggunakan readelf? Ini memberi saya jumlah output yang luar biasa.
Juraj Martinka
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.