a2.c
#include<stdio.h>
void a(){
printf("a2.c\n");
}
a3.c
#include<stdio.h>
void a(){
printf("a3.c\n");
}
b2.c
void a();
void b2(){
a();
}
b3.c
void a();
void b3(){
a();
}
main.c
#include<stdio.h>
void b3();
void b2();
int main(){
b3();
b2();
}
gcc -fPIC -shared a3.c -o a3.so
gcc -fPIC -shared b2.c a2.so -o b2.so -Xlinker -rpath ./
gcc main.c b2.so b3.so a2.so a3.so -o main -Xlinker -rpath ./