use linker options (+init and +fini) to specify the initializers and terminators, and lib3.so uses compiler pragmas.

C source for lib1.so (file lib1.c): lib1()

{

printf("lib1\n");

}

void

lib1_init()

{

printf("lib1_init\n");

}

void

lib1_fini()

{

printf("lib1_fini\n");

}

C source for lib2.so (file lib2.c): lib2()

{

printf("lib2\n");

}

void

lib2_init()

{

printf("lib2_init\n");

}

void

lib2_fini()

{

printf("lib2_fini\n");

}

C source for lib3.so (file lib3.c): lib3()

{

printf("lib3\n");

}

#pragma init "lib3_init"

void

lib3_init()

{

printf("lib3_init\n");

}

#pragma fini "lib3_fini"

void

lib3_fini()

{

printf("lib3_fini\n");

}

Commands used to build these libraries:

$ cc lib1.c lib2.c lib3.c main.c -c

140 Shared Library Management Routines