Представьте, что Library1.so
и Library2.so
имеют: func1(), func2(), glob_data1, glob_data2
Как правило, очень плохая идея загружать обе библиотеки в один процессв Linux (и других системах UNIX).
Когда, например, func1
из library1
вызывает func2
, какой func2
вызывается?Ответ зависит от того, как именно были связаны библиотеки, как они были загружены и в каком порядке.
Если функции не вызывают никаких других экспортируемых символов, вы можете вызвать их черезуказатель на функцию, полученный из dlopen
и dlsym
:
void *h1 = dlopen("Library1.so", RTLD_LOCAL|RTLD_LAZY);
int (*f1L1)(void) = dlsym(h1, "func1");
void *h2 = dlopen("Library2.so", RTLD_LOCAL|RTLD_LAZY);
int (*f1L2)(void) = dlsym(h2, "func1");
printf("func1 from Library1 returns %d\n", f1L1());
printf("func1 from Library2 returns %d\n", f1L2());