链接程序和库指南

删除符号

对符号缩减的扩展是指从目标文件的符号表中删除符号项。局部符号仅在目标文件的 .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

可以使用 -B eliminate 选项在命令行中声明自动删除指令 "*"。