Câu trả lời:
Những gì bạn cần là nmvà -Dtùy chọn của nó :
$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
U atanf
U calloc
.
.
.
Sumbols xuất khẩu được chỉ định bởi a T. Các ký hiệu bắt buộc phải được tải từ các đối tượng chia sẻ khác có a U. Lưu ý rằng bảng ký hiệu không chỉ bao gồm các hàm, mà còn xuất các biến.
Xem nm trang hướng dẫn để biết thêm thông tin.
nmmà không có -Dcờ.
objdump -T *.so cũng có thể làm công việc
Trên MAC, bạn cần sử dụng nm *.o | c++filt, vì không có -Ctùy chọn nào trong nm.
Trong số các công cụ đã được đề cập khác, bạn cũng có thể sử dụng readelf( thủ công ). Nó tương tự objdumpnhưng đi sâu vào chi tiết hơn. Xem điều này để giải thích sự khác biệt.
$ 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)