Согласно этой странице кажется, что она не работает с динамическим символом.Более подробное объяснение доступно в оригинальной теме .Если вы хотите использовать оба символа, то вам как-то нужно повторно связать одну из библиотек.Однако, если вам нужен только один символ, то порядок связывания может вам помочь.
Возможно, решение заключается в создании библиотеки-оболочки, в которой вы открываете две библиотеки, создаете два новых символа и назначаете их с помощью dlsymс правильным дескриптором.
void *lib_handle1 = dlopen("./lib1.so", RTLD_NOW);
void *lib_handle2 = dlopen("./lib2.so", RTLD_NOW);
fp_add f_add1 = dlsym((lib_handle1, "add");
fp_add f_add2 = dlsym(lib_handle2, "add");
Конечно, это не решает проблему вызова, генерируемого внутри библиотек.