There are two special functions for library construction and destruction. Despite they are obsolete and replaced by generic constructor/destructor functions, they are used in a lot of libraries. Lets write a simple library with one some_func() function and with _init(), _fini() special functions.
In the above code there are 3 files: the library itself - samplelib.h, samplelib.c and the application - main.c.
for compiling the library:
$ gcc -fPIC -c samplelib.c
$ gcc -nostartfiles -shared -o libsamplelib.so samplelib.o
Here -fPIC option is standing for position independent code. The -shared option is for shared library creation. By default gcc uses _fini () and _init() defined in crti.o, so -nostartfiles signals to gcc to not do that.
And to compile the application we run the following.
$ gcc -o main main.c -L. -lsamplelib
Here -L. option informs to gcc to search libraries in current directory, and -lsamplelib - to use libsamplelib.so shared library.
Finally by running the program the following will be outputted:
samplelib: _init is called
main: main is called
samplelib: some_func is called
samplelib: _fini is called