I have an executable shared_main
, a shared library libbar.so
and a dynamic load shared library libfoo.so
(load in shared_main
via dlopen
).
shared_main
doesn't use any symbols from libbar.so
but libfoo.so
does.
So gcc -g -Wall -o shared_main shared_main.c libbar.so -ldl
doesn't link libbar.so
to shared_main
.
Checked via ldd shared_main
.
How to let gcc force shared_main
link libbar.so
?
P.S. I know I can link libfoo.so
with libbar.so
. But I want to try if I can force shared_main
to link libbar.so
here.
shared_main.c
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
int main(){
void* libHandle = dlopen("./libfoo.so", RTLD_LAZY);
if(libHandle == NULL){
printf("dlopen:%s", dlerror());
exit(1);
}
int(*xyz)(int);
xyz = (int(*)(int)) dlsym(libHandle, "xyz");
if(xyz == NULL){
printf("dlsym:%s", dlerror());
exit(1);
}
int b = xyz(3);
printf("xyz(3): %d\n", b);
}
foo.c (libfoo.so)
void func_in_bar();
int xyz(int b){
func_in_bar();
return b + 10;
}
bar.c (libbar.so)
//mimic python share library runtime
#include <stdio.h>
void func_in_bar(){
printf("I am a Function in bar\n");
}
void another_func_in_bar(){
printf("I am another function in bar\n");
}
makefile
shared_main:
gcc -g -Wall -o shared_main shared_main.c libbar.so -ldl
shared:
gcc -g -Wall -fPIC -shared -o libfoo.so foo.c
gcc -g -Wall -fPIC -shared -o libbar.so bar.c