@Kamikadze1024

Как загрузить объект класса из dll библиотеки?

У меня есть библиотека, из которой я хочу получить объект класса, но не могу этого сделать.

Код загрузки библиотеки:
#include "../TestLibrary/TestLibrary.hpp"

int main(int argc, char *argv[]) {

#ifdef __WIN32__
    SetConsoleOutputCP(CP_UTF8);
    SetConsoleCP(CP_UTF8);
#endif

    QCoreApplication a(argc, argv);

    QLibrary testLibrary("../TestLibrary/libTestLibrary_13.so");
    if(!testLibrary.isLoaded()) {
        std::cout << "Не смог загрузить библиотеку" << std::endl;
        a.exit(0);
    }

    typedef LibraryClass* (*getObject)();
    getObject f = (getObject)testLibrary.resolve("getObject");
    if(!f) {
        std::cout << "Не смог получить getObject" << std::endl;
        a.exit(0);
    }
    LibraryClass* tlInstance = f();
    tlInstance->objectMethod();

    testLibrary.unload();

    return a.exec();
}


Глобальный заголовок с макросами:
#ifndef TESTLIBRARY_GLOBAL_H
#define TESTLIBRARY_GLOBAL_H

#if defined(_MSC_VER) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) || defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
#  define Q_DECL_EXPORT __declspec(dllexport)
#  define Q_DECL_IMPORT __declspec(dllimport)
#else
#  define Q_DECL_EXPORT     __attribute__((visibility("default")))
#  define Q_DECL_IMPORT     __attribute__((visibility("default")))
#endif

#if defined(TESTLIBRARY_LIBRARY)
#  define TESTLIBRARY_EXPORT Q_DECL_EXPORT
#else
#  define TESTLIBRARY_EXPORT Q_DECL_IMPORT
#endif


Код заголовка библиотеки:
#ifndef LIBRARYCLASS_HPP
#define LIBRARYCLASS_HPP

#include "TestLibrary_global.h"

class TESTLIBRARY_EXPORT LibraryClass {
private:
    int m_val;

public:
    LibraryClass();
    void objectMethod();
};

#endif // LIBRARYCLASS_HPP


CPP файл:
LibraryClass::LibraryClass() {
    m_val = 0;
}

//метод объектовый
void LibraryClass::objectMethod() {
    std::cout << "Внутреобъектовый метод библиотеки" << std::endl;
}

extern "C" TESTLIBRARY_EXPORT LibraryClass* getObject() {
    return new LibraryClass();
}


При попытке собрать и исполнить код загрузки библиотеки получаю undefined reference LibraryClass::LibraryClass().
Что я делаю не так, и что нужно, чтобы получить экземпляр класса во время выполнения?

Компилятор gcc/mingw.
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
@r_makis
не видно в главном файле
#include "LibraryClass.hpp"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы