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
140 Shared Library Management Routines