次の例では、3 つのシンボル参照を定義する方法を示します。これらの参照を使用して、アーカイブのメンバーを抽出します。このアーカイブ抽出は、複数の -u オプションをリンク編集に指定することにより実現できますが、この例では、最終的なシンボルの範囲を、ローカルに縮小する方法も示しています。
$ cat foo.c
void foo()
{
(void) printf("foo: called from lib.a\n");
}
$ cat bar.c
void bar()
{
(void) printf("bar: called from lib.a\n");
}
$ cat main.c
extern void foo(), bar();
void main()
{
foo();
bar();
}
$ ar -rc lib.a foo.o bar.o main.o
$ cat mapfile
{
local:
foo;
bar;
global:
main;
};
$ cc -o prog -M mapfile lib.a
$ prog
foo: called from lib.a
bar: called from lib.a
$ nm -x prog | egrep "main$|foo$|bar$"
[28] |0x00010604|0x00000024|FUNC |LOCL |0x0 |7 |foo
[30] |0x00010628|0x00000024|FUNC |LOCL |0x0 |7 |bar
[49] |0x0001064c|0x00000024|FUNC |GLOB |0x0 |7 |main
|
大域からローカルへのシンボル範囲の縮小の重要性については、「シンボル範囲の縮小」で説明しています。