編譯符號表匯出示例:
使用gcc編譯鏈結引數--version-script 控制動態符號表,如想
使用鏈結引數 --retain-symbols-file 控制靜態符號表,--version-script 控制動態符號表,後面都是接含有匯出符號的檔案的名字。這兩個引數在移植windows下的動態庫很有用,windows下的def檔案能控制匯出符號,我們可以在linux下的構建指令碼中解析def生成乙個匯出符號檔案,然後作為retain-symbols-file,version-script的引數。示例如下:
這是a1.c檔案
[cpp]
#include
#include
voidfunc_1()
voidfunc_2()
10.
13.
14.voidfunc_3()
15.
這是a1.sym檔案,控制靜態匯出符號
[cpp]
func_1
func_3
這是a1.map檔案,控制動態匯出符號
global表示要匯出的符號,local表示不匯出的,*表示都不匯出
[cpp]
; 生成共享庫
[cpp]
gcc a1.c -shared -o liba1.so -wl,--retain-symbols-file=a1.sym -wl,--version-script=a1.map
檢視符號表:
readelf -s liba1.so
symbol table '.dynsym' contains 7 entries:
num: value size type bind vis ndx name
0: 00000000 0 notype local default und
1: 00000000 0 func weak default und __cxa_finalize@glibc_2.1.3 (2)
2: 00000000 0 func global default und puts@glibc_2.0 (3)
3: 00000000 0 notype weak default und __gmon_start__
4: 00000000 0 notype weak default und _jv_registerclasses
5: 00000400 20 func global default 11 func_2
6: 000003ec 20 func global default 11 func_1
10.
11.
12. symbol table '.symtab' contains 27 entries:
13. num: value size type bind vis ndx name
14. 0: 00000000 0 notype local default und
15. 1: 00000114 0 section local default 1
16. 2: 00000138 0 section local default 2
17. 3: 0000015c 0 section local default 3
18. 4: 000001cc 0 section local default 4
19. 5: 00000232 0 section local default 5
20. 6: 00000240 0 section local default 6
21. 7: 00000270 0 section local default 7
22. 8: 000002c0 0 section local default 8
23. 9: 000002d0 0 section local default 9
24. 10: 00000300 0 section local default 10
25. 11: 00000330 0 section local default 11
26. 12: 00000468 0 section local default 12
27. 13: 00000482 0 section local default 13
28. 14: 000004ac 0 section local default 14
29. 15: 000004d8 0 section local default 15
30. 16: 00001f0c 0 section local default 16
31. 17: 00001f14 0 section local default 17
32. 18: 00001f1c 0 section local default 18
33. 19: 00001f20 0 section local default 19
34. 20: 00001fe8 0 section local default 20
35. 21: 00001ff4 0 section local default 21
36. 22: 00002008 0 section local default 22
37. 23: 0000200c 0 section local default 23
38. 24: 00000000 0 section local default 24
39. 25: 00000414 20 func local default 11 func_3
40. 26: 000003ec 20 func global default 11 func_1
顯而易見:動態符號表中是函式func_2,func_1,靜態符號表中是func_3,func_1
未解決符號表,匯出符號表和位址重定向表
讓我們總結一下 編譯器把乙個cpp編譯為目標檔案的時候,除了要在目標檔案裡寫入cpp裡包含的資料和 還要至少提供3個表 未解決符號表,匯出符號表和位址重定向表。未解決符號表提供了所有在該編譯單元裡引用但是定義並不在本編譯單元裡的符號及其出現的位址。匯出符號表提供了本編譯單元具有定義,並且願意提供給其...
16 驅動模組的符號表與符號匯出
檢視elf檔案的資訊 readelf test.ko a ko檔案組成 1 elf檔案頭 elf header magic 7f 45 4c 46 0101 0100 0000 0000 0000 0000 class elf32 data 2 s complement,little endian ...
邏輯符號表
邏輯符號表 跳轉到 導航,搜尋 在邏輯中,經常使用一組符號來表達邏輯結構。因為邏輯學家非常熟悉這些符號,他們在使用的時候沒有解釋它們。所以,給學邏輯的人的下列 列出了最常用的符號 它們的名字 讀法和有關的數學領域。此外,第三列包含非正式定義,第四列給出簡短的例子。要注意,在一些情況下,不同的符號有相...