对符号缩减的扩展是指从目标文件的符号表中删除符号项。局部符号仅在目标文件的 .symtab 符号表中维护。可以使用链接编辑器的 -s 选项或 strip(1) 从目标文件中删除整个表。有时,您可能需要保留 .symtab 符号表,但删除选择的局部符号定义。
可以使用 mapfile 指令 eliminate 删除符号。与 local 指令一样,可以单独定义符号。或者,可以将符号名称定义为特殊的自动删除指令 "*"。以下示例说明如何删除上一个符号缩减示例中的符号 bar。
$ cat mapfile lib.so.1.1 { global: foo; local: str; eliminate: *; }; $ cc -o lib.so.1 -M mapfile -G foo.c bar.c $ nm -x lib.so.1 | egrep "foo$|bar$|str$" [31] |0x00010428|0x00000004|OBJT |LOCL |0x0 |12 |str [35] |0x00000348|0x00000028|FUNC |GLOB |0x0 |6 |foo |