Sto scrivendo una libreria, che viene caricata dinamicamente nella mia applicazione principale con dlsym. Ho i seguenti file:Perché viene visualizzato un errore di ricerca dei simboli?
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();
}
}
affari/BCGateway.h
#include <igateway.h>
class BCGateway: public IGateway {
public:
static IGateway* instance();
protected:
BCGateway();
private:
static IGateway* instance_;
};
affari/BCGateway.cpp
#include "BCGateway.h"
IGateway* BCGateway::instance_ = NULL;
IGateway* BCGateway::instance(){
return instance_ ? instance_ : (instance_ = new BCGateway);
}
Posso connettermi alla libreria e caricare correttamente l'istanza Library. Ma quando chiamo Library-> getGateway() nel mio principale-app ottengo il seguente errore:
symbol lookup error: ./gateways/libSwisscomXtraZone.so: undefined symbol: _ZN9BCGateway8instanceEv
potete per favore darmi un suggerimento, come posso risolvere questo? Sono bloccato.
Grazie.
Scritto il mio ultimo commento, ho visto, che ho appena dimenticato di aggiungere BCGateway.h e BCGateway.cpp al mio file di progetto, da cui è stato generato il makefile. Quindi questa classe non è stata effettivamente dichiarata nella mia biblioteca. Dato che sono molto nuovo alle librerie C++, ho pensato che fosse un problema con la dichiarazione della libreria o giù di lì. Grazie mille per il vostro aiuto. –