- main.cpp <- line 106 to 164 invoke dlopen/dlsym/dlclose
- basefilter.hpp <- naked abstract base class
- basefilter.cpp
- examplefilter.hpp <- a test plugin
- examplefilter.cpp
- everything <- the repository
Running the whole thing will result in the following error:
Cannot open library "./libexamplefilter.so" ./libexamplefilter.so: undefined symbol: _ZTI10BaseFilter
Since the code is pretty small and understandable you should be able to understand it right away. Anyone a clue what is wrong?
Should I make rather declare create() as extern "C" void* create(void); and cast the void pointer afterwards instead of directly trying to link c++ symbols?
Next Step
after using -Wl,-export-dynamic
, it tells me:
Cannot load library symbols "./libexamplefilter.so" ./libexamplefilter.so: undefined symbol: create
Uh, do I have to give a mangled c++-name there instead of "dlsym(handle, "create")". Probably. Is there a elegant way to do this?
The answer is declaring create() extern "C" ... create .... This works perfectly well. Problem solved. Thanks for your help and patience.