ошибка линковки библиотеки (QT5.4 & DLL)



  • Здравствуйте!
    Мне в проекте необходимо использовать стороннюю библиотеку, но она в упор не хочет линковаться. Получаю ошибку:
    undefined reference to `sol_CreateGrammarEngineW(wchar_t const*)@4' ....

    Вот конкретно из этого SDK эта библиотека
    http://solarix.ru/for_developers/download/win/sdk-grammar-engine-demo.exe
    с сайта разработчика:
    http://solarix.ru/

    1. Я беру из SDK три файла:
      solarix_grammar_engine.dll
      solarix_grammar_engine.h
      Solarix_Grammar_Engine.lib
      Всё это лежу в папку проекта.

    2. в .pro файл добавляю код:
      win32: LIBS += -L$$PWD/ -lSolarix_Grammar_Engine
      INCLUDEPATH += $$PWD/
      DEPENDPATH += $$PWD/

    В коде упоминаю только две функции из dll.

    1. Сам код в проекте выглядит так:
      #include "solarix_grammar_engine.h"

    HGREN hEngine; // дескриптор библиотеки граматического словаря

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);

    hEngine = NULL;
    hEngine = sol_CreateGrammarEngine(NULL);
    qDebug() << "Loading grammar engine...\n";//*/
    

    }

    MainWindow::~MainWindow()
    {
    sol_DeleteGrammarEngine(hEngine);
    delete ui;
    }

    У кого-то эта библиотека сможет заработать, или это только у меня руки не из того места растут?
    Есть какие-нибудь идеи как победить эту ошибку?
    И вообще как разобраться, может эта библиотека в принципе линковаться, может что в ней проблема?



  • И вообще как разобраться, может эта библиотека в принципе линковаться, может что в ней проблема?

    Возможно, что библиотека и ваше приложение собираются различными компиляторами. Например, solarix_grammar_engine.dll собрана MSVC, а ваша программа собирается с помощью MinGW.



  • Сверху правильно сказали. Что за версию Qt используете ? mingw ? Используйте для этой dll версию Qt VS



  • Добрый день!
    Спасибо за ответы.
    Да, действительно, надо знать на чём собрана библиотека. В моём случае она действительно собрана на VC, при установке QT я проигнорировал компилятор QT VS. Ну, с этим я разобрался, в принципе я уже пошёл по пути позднего связывания библиотеки. Благо разработчик библиотеки предоставил пример кода на QT. Здесь тоже не всё оказалось гладко.
    Библиотека поначалу никак не хотела грузиться (QLibrary::load())
    Дело в том, об этом новички, как я, не знают, библиотека может тянуть кучу зависимостей, зависеть от других библиотек и об этом надо помнить всегда. От каких модулей зависит библиотека, которую мы подключаем, помогает узнать Dependency Walker. В итоге рядом с подключаемой библиотекой пришлось положить ещё библиотеки msvcp71.dll и msvcr71.dll, тогда библиотека подключилась. Плохо только одно, когда библиотека не подключается из-за зависимостей, об этом приходится вначале только догадываться.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.