[Updated: 04/07/2006] Much accurate information is available in a better format at:
Reducing Symbol Scope with Sun Studio C/C++__________________
Default behavior
----------------
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%CC -c hidden.c
scope of symbols inside object "hidden.o":
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%elfdump -C -s hidden.o
Symbol Table: .symtab
index value size type bind oth ver shndx name
[3] 0x00000080 0x0000002c FUNC GLOB D 0 .text int agefunc()
[4] 0x00000050 0x00000020 FUNC GLOB D 0 .text char firstchar(char*)
[5] 0x00000010 0x0000002c FUNC GLOB D 0 .text char*lastname(char*)
[6] 0x00000000 0x00000004 OBJT GLOB D 0 .data age
All symbols are "
global" & "
defined" (GLOB & D)
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%ls -l
total 10
-rw-r--r-- 1 build engr 281 Sep 14 16:03 driver.c
-rw-r--r-- 1 build engr 223 Sep 14 16:00 hidden.c
-rw-r--r-- 1 build engr 63 Sep 14 15:58 hidden.h
-rw-r--r-- 1 build engr 1468 Sep 14 16:00 hidden.o
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%CC -G -o libhidden.so hidden.o
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%ls -l
total 22
-rw-r--r-- 1 build engr 281 Sep 14 16:03 driver.c
-rw-r--r-- 1 build engr 223 Sep 14 16:00 hidden.c
-rw-r--r-- 1 build engr 63 Sep 14 15:58 hidden.h
-rw-r--r-- 1 build engr 1468 Sep 14 16:00 hidden.o
-rwxr-xr-x 1 build engr 5256 Sep 14 16:05 libhidden.so
scope of symbols inside object "libhidden.so"
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%elfdump -C -s libhidden.so
Symbol Table: .symtab
index value size type bind oth ver shndx name
[1] 0x00000000 0x00000000 FILE LOCL D 0 ABS libhidden.so
[40] 0x00010828 0x00000004 OBJT GLOB D 0 .data age
[46] 0x00000558 0x00000020 FUNC GLOB D 0 .text char firstchar(char*)
[54] 0x00000518 0x0000002c FUNC GLOB D 0 .text char*lastname(char*)
[56] 0x00000588 0x0000002c FUNC GLOB D 0 .text int agefunc()
Global & Defined
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%ls -l
total 22
-rw-r--r-- 1 build engr 281 Sep 14 16:03 driver.c
-rw-r--r-- 1 build engr 223 Sep 14 16:00 hidden.c
-rw-r--r-- 1 build engr 63 Sep 14 15:58 hidden.h
-rw-r--r-- 1 build engr 1468 Sep 14 16:00 hidden.o
-rwxr-xr-x 1 build engr 5256 Sep 14 16:05 libhidden.so
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%setenv LD_LIBRARY_PATH /sunbuild1/giri/testcases/symbol-hiding:$LD_LIBRARY_PATH
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%CC -lhidden -o driver driver.c
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%ls -l
total 148
-rwxr-xr-x 1 build engr 63680 Sep 14 16:11 driver
-rw-r--r-- 1 build engr 297 Sep 14 16:11 driver.c
-rw-r--r-- 1 build engr 223 Sep 14 16:00 hidden.c
-rw-r--r-- 1 build engr 63 Sep 14 15:58 hidden.h
-rw-r--r-- 1 build engr 1468 Sep 14 16:00 hidden.o
-rwxr-xr-x 1 build engr 5256 Sep 14 16:05 libhidden.so
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%./driver
lname = mandalika
age = 25
first char = c
It just *
Works*
scope of symbols inside executable program "driver":
bpte4500s001:/sunbuild1/giri/testcases/symbol-hiding/%elfdump -C -s driver
Symbol Table: .symtab
index value size type bind oth ver shndx name
[90] 0x00028f6c 0x00000000 FUNC GLOB D 0 UNDEF char firstchar(char*)
[122] 0x00028f60 0x00000000 FUNC GLOB D 0 UNDEF int agefunc()
[197] 0x00028f48 0x00000000 FUNC GLOB D 0 UNDEF char*lastname(char*)
i.e., the default symbol scope on Solaris (UNIX® infact) is "Global" & "Defined"