Can not call application function from shared library. Unresolved symbol error
-
Hi all.
I am trying to make a shared library, some sort of plugin, and I want this library to call some functions from my main app.
Library code is (simplified):#include "../../core/plugin.h" #include "iostream" #include "objmeshloader.h" static void register_plugin(zim::AppContainer *container) { container->getMeshLoader()->registerLoader(); std::cout << "Registering plugin objloader for app version: " << container->getAppMajorVersion() << std::endl; }
When I try to load it using QLibrary it gives me error:
Error: Cannot load library libobjloader.so.1.0.0: undefined symbol: _ZN3zim12AppContainer13getMeshLoaderEv
QLibrary lib(filePath); lib.setLoadHints(QLibrary::ResolveAllSymbolsHint); if (!lib.load()) { qFatal("Unable to load plugin %s. Error: %s", qUtf8Printable(filePath), qUtf8Printable(lib.errorString())); }
When I dump symbols it seems that everything is OK
nm -g app | grep _ZN3zim12AppContainer13getMeshLoaderEv 000000000000738a T _ZN3zim12AppContainer13getMeshLoaderEv
nm -g plugins/libobjloader.so.1.0.0 | grep _ZN3zim12AppContainer13getMeshLoaderEv U _ZN3zim12AppContainer13getMeshLoaderEv
Why it can not link library?
-
@zim32 said in Can not call application function from shared library. Unresolved symbol error:
libobjloader.so.1.0.0
That's your whole file path? Is the working dir the same as location of that library, then?
-
It seems I can't call any function defined if my main app.
F.e. if I declare some simple function in plugin.h file
extern "C" { void some_test_func(); }
and then define it in my main.cpp
void some_test_func() { qDebug("some_test_func called"); }
Trying to call it from shared library gives me undefined symbol: some_test_func