Tôi đang viết một thư viện, được tải động trong ứng dụng chính của tôi với dlsym. Tôi có những file sau:Tại sao tôi nhận được lỗi tra cứu ký hiệu?
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();
}
}
kinh doanh/BCGateway.h
#include <igateway.h>
class BCGateway: public IGateway {
public:
static IGateway* instance();
protected:
BCGateway();
private:
static IGateway* instance_;
};
kinh doanh/BCGateway.cpp
#include "BCGateway.h"
IGateway* BCGateway::instance_ = NULL;
IGateway* BCGateway::instance(){
return instance_ ? instance_ : (instance_ = new BCGateway);
}
Tôi có thể kết nối với thư viện và tải thành công phiên bản Library-instance. Nhưng khi tôi gọi library-> getGateway() trong chính ứng dụng của tôi, tôi nhận được lỗi sau:
symbol lookup error: ./gateways/libSwisscomXtraZone.so: undefined symbol: _ZN9BCGateway8instanceEv
bạn có thể vui lòng cho tôi một gợi ý, làm thế nào tôi có thể giải quyết này? Tôi bị kẹt.
Cảm ơn.
Viết nhận xét cuối cùng của tôi, tôi thấy, rằng tôi vừa quên thêm BCGateway.h và BCGateway.cpp vào tệp dự án của tôi, trong đó makefile được tạo ra. Vì vậy, lớp này thực sự không được khai báo trong thư viện của tôi. Vì tôi rất mới với các thư viện C++, tôi nghĩ rằng đó là một vấn đề với việc khai báo thư viện hay như vậy. Cảm ơn sự giúp đỡ của bạn. –