Я бы сказал, та же библиотека означает тот же путь , я построил небольшой пример для иллюстрации:
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
(void)argc, (void)argv;
void (*hello)();
void *handle = dlopen("./libhello.so", RTLD_NOW);
printf("handle = %p\n", handle);
void *handle2 = dlopen("libs/libhello.so", RTLD_NOW);
printf("handle with different path = %p\n", handle2);
// using symlink to libhello.so
void *handle3 = dlopen("./symlink.so", RTLD_NOW);
printf("handle with soft link = %p\n", handle3);
if (handle == 0) {
fprintf(stderr, "%s\n", dlerror());
exit(1);
}
void *f = dlsym(handle, "hello");
if (f) {
hello = (void (*)())f;
hello();
}
dlclose(handle);
return 0;
}
и общую библиотеку:
/* libhello.so */
#include <stdio.h>
void hello()
{
printf("hello\n");
}
вывод:
handle = 0x217c030
handle with different path = 0x217ca40
handle with soft link = 0x217c030
hello
Надеюсь, это поможет.