I want to have a plugin, with a simpler name to resolve in other C++ code.
class B {
};
extern "C" B foo(); // to avoid name mangling in order to be loaded by dlsym
And in the other part of the program (which is also in C++ and shares the same definition of class B with the plugin):
B (*func)();
func = dlsym("/path/to/so", "foo");
B m = func();
Will such code cause any problem, i.e. is it allowed (by standard) to use a C++ class as parameter or return type in an extern "C"
function? It seems to work on my gcc, but what about the others?
That should work, with a few conditions:
Declaring foo() as extern "C"
will of course allow you to load it through dlsym() using the actual, unmangled function name, but otherwise will have no effect on how you use that function after you load it.
The usual rules still apply. If you break binary compatibility of either foo() or class B, you will need to recompile the plugin, just as you would have to recompile it if it was a regular, non-runtime loaded dynamic library.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With