Consulta la nota per dynamic_cast , throw , typeid non funziona con le raccolte condivise
nella pagina delle domande frequenti di GCC.
Perché stai usando dlopen() , devi collegare il tuo eseguibile con -E flag (o pass-Wl,-E a g++ se g++ sta invocando il linker) e passa il RTLD_GLOBAL segnala a dlopen() .