Why am I getting a symbol lookup error?
c++
Solution
I put the error through `c++filt`, it says that the mangled name stands for
BCGateway::instance()
This suggests that you call `BCGateway::instance()` somewhere and forgot to link against `BCGateway.o` or you even forgot to define `BCGateway::instance()`.
Problem
I am writing a library, which is dynamically loaded in my main-application with dlsym. I have the following files: library.h ``` #include <ilibrary.h> #include <igateway.h> class LibraryImpl; class Library: public ILibrary { public: static ILibrary* instance(); IGateway* getGateway() const; protected: Library(); virtual ~Library(); private: static ILibrary* instance_; LibraryImpl* library_; }; extern "C" { IMPORT_EXPORT ILibrary* getLibrary(); } ``` library.cpp ``` #include "library.h" #include "business/BCGateway.h" class LibraryImpl { public: IGateway* getGateway(); }; IGateway* LibraryImpl::getGateway() { return BCGateway::instance(); } ILibrary* Library::instance_ = NULL; ILibrary* Library::instance() { return instance_ ? instance_ : (instance_ = new Library); } Library::Library() { library_ = new LibraryImpl(); } Library::~Library() { delete library_; } IGateway* Library::getGateway() const { return library_->getGateway(); } extern "C" { IMPORT_EXPORT ILibrary* getLibrary(){ return Library::instance(); } } ``` business/BCGateway.h ``` #include <igateway.h> class BCGateway: public IGateway { public: static IGateway* instance(); protected: BCGateway(); private: static IGateway* instance_; }; ``` business/BCGateway.cpp ``` #include "BCGateway.h" IGateway* BCGateway::instance_ = NULL; IGateway* BCGateway::instance(){ return instance_ ? instance_ : (instance_ = new BCGateway); } ``` I can connect to the library and successfully load the Library-instance. But when I call library->getGateway() in my main-app I get the following error: symbol lookup error: ./gateways/libSwisscomXtraZone.so: undefined symbol: _ZN9BCGateway8instanceEv Can you please give me a hint, how I can resolve this? I'm stuck. Thanks.