dynamic_cast fails when used with dlopen/dlsym
I found the answer to my question here. As I understand it, I need to make the typeinfo available in 'testc' available to the library 'testd'. To do this when using dlopen()
, two extra things need to be done:
- When linking the library, pass the linker the
-E
option, to make sure it exports all symbols to the executable, not just the ones that are unresolved in it (because there are none) - When loading the library with
dlopen()
, add theRTLD_GLOBAL
option, to make sure symbols exported bytestc
are also available totestd
In general, gcc does not support RTTI across dlopen boundaries. I have personal experience with this messing up try/catch, but your problem looks like more of the same. Sadly, I'm afraid that you need to stick to simple stuff across dlopen.