Consulte la nota para dynamic_cast , throw , typeid no funciona con bibliotecas compartidas
en la página de Preguntas frecuentes de GCC.
Porque estás usando dlopen() , debe vincular su ejecutable con el -E bandera (o pasar-Wl,-E a g++ si g++ está invocando al enlazador) y pasa el RTLD_GLOBAL marcar a dlopen() .