編譯符號表導出示例:linux
使用GCC編譯連接參數--version-script 控制動態符號表,如想windows
使用連接參數 --retain-symbols-file 控制靜態符號表,--version-script 控制動態符號表,後面都是接含有導出符號的文件的名字。這兩個參數在移植windows下的動態庫頗有用,windows下的DEF文件能控制導出符號,咱們能夠在linux下的構建腳本中解析DEF生成一個導出符號文件,而後做爲retain-symbols-file,version-script的參數。示例以下:函數
這是a1.c文件ip
[cpp] io
- #include <stdio.h>
- #include <stdlib.h>
-
- void func_1()
- {
- printf("a1 :: func_1\n");
- }
-
- void func_2()
10. { 編譯
- 11. printf("a1 :: func_2\n");
12. } table
- 13.
14. void func_3() gcc
15. { file
- 16. printf("a1 :: func_3\n");
17. } map
這是a1.sym文件,控制靜態導出符號
[cpp]
這是a1.map文件,控制動態導出符號
global表示要導出的符號,local表示不導出的,*表示都不導出
[cpp]
- {
- global:
- func_1;
- func_2;
- local: *;
- };
生成共享庫
[cpp]
- gcc a1.c -shared -o liba1.so -Wl,--retain-symbols-file=a1.sym -Wl,--version-script=a1.map
查看符號表:
- 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