Source code of shared library:
lib.c
#include <stdio.h>
int count;
void test(const char *m){
while(1)
{
printf("%s %d\n", m, ++count);
sleep(1);
}
}
lib.h
void test(const char *m);
Main program: test.c
#include<stdio.h>
#include "lib.h"
int main(int argc, char** argv)
{
printf("Main\n");
test("test ");
printf("Quit\n");
return 1;
}
To compile shared library:
$ gcc lib.c -fPIC -shared -o lib.so
To compile main program:
$ gcc -g test.c -o test -L. -lm lib.so
To run the “test”:
$ export LD_LIBRARY_PATH=${pwd}:${LD_LIBRARY_PATH}
$./test
Change the lib.c to:
#include <stdio.h>
void my_init(void) __attribute__((constructor));
void my_fini(void) __attribute__((destructor));
int count;
void test(const char *m){
//printf("%s %d\n", m, ++count);
printf(" OK!\n");
sleep(1);
}
void my_init(void)
{
printf("Init ... ... %d\n", ++count);
}
void my_fini(void)
{
printf("Fini ... ... %d\n", ++count);
}
Output:
Init ... ... 1
Main
OK!
Quit
Fini ... ... 2