链接程序和库指南

定义绝对符号

以下示例说明如何定义两种绝对符号定义。然后,使用这些定义解析输入文件 main.c 中的引用。


$ cat main.c

extern  int     foo();

extern  int     bar;



main()

{

        (void) printf("&foo = %x\n", &foo);

        (void) printf("&bar = %x\n", &bar);

}

$ cat mapfile

{

        global:

                foo = FUNCTION V0x400;

                bar = DATA V0x800;

};

$ cc -o prog -M mapfile main.c

$ prog

&foo = 400 &bar = 800

$ nm -x prog | egrep "foo$|bar$"

[37]    |0x00000800|0x00000000|OBJT |GLOB |0x0  |ABS    |bar

[42]    |0x00000400|0x00000000|FUNC |GLOB |0x0  |ABS    |foo

从输入文件获取函数或数据项的符号定义时,这些符号定义通常与数据存储元素关联。mapfile 定义不足以构造此数据存储,因此,这些符号必须保持为绝对值。如果在共享库中定义符号,则应避免绝对定义。 请参见扩充符号定义