Как правильно связать внешние библиотеки DLL в Qt Creator

#c #qt #dll #qt5 #qmake

#c #qт #dll — файл #qt5 #qmake #c #qt #dll

Вопрос:

Пытаюсь создать проект, найденный @ uconfig , для проекта требуется poppler, и автор предоставил готовые заголовки ссылок и библиотеки DLL

Я скачал их, и это структура проекта

введите описание изображения здесь

папка dll содержит все библиотеки DLL, а poppler содержит заголовочные файлы, pdf_extract.pro имеет следующее содержание

 QT      = core gui widgets xml

TARGET = pdf_extract
TEMPLATE = lib
DEFINES  = DATASHEET_EXTRACTOR_EXPORT_LIB
DESTDIR = "$$PWD/../../bin"

CONFIG(release, debug|release) {
    CONFIG  = optimize_full
}

SOURCES  = 
    $$PWD/datasheet.cpp 
    $$PWD/datasheetpackage.cpp 
    $$PWD/datasheetpin.cpp 
    $$PWD/datasheetbox.cpp 
    $$PWD/pdfdebugwidget/pdfdebugwidget.cpp 
    $$PWD/pdfdebugwidget/pdfdebugviewer.cpp 
    $$PWD/pdfdebugwidget/pdfdebugscene.cpp 
    $$PWD/pdfdebugwidget/pdfdebugitempage.cpp 
    $$PWD/pdfdebugwidget/pdfdebugitempin.cpp 
    $$PWD/pdfdebugwidget/pdfdebugitemtextbox.cpp 
    $$PWD/model/pdfdatasheet.cpp 
    $$PWD/model/pdfpage.cpp 
    $$PWD/model/pdftextbox.cpp 
    $$PWD/model/pdfpin.cpp 
    $$PWD/model/pdfcomponent.cpp 
    $$PWD/controller/pdfloader.cpp

HEADERS  = 
    $$PWD/pdf_extract_common.h 
    $$PWD/datasheet.h 
    $$PWD/datasheetpackage.h 
    $$PWD/datasheetpin.h 
    $$PWD/datasheetbox.h 
    $$PWD/pdfdebugwidget/pdfdebugwidget.h 
    $$PWD/pdfdebugwidget/pdfdebugviewer.h 
    $$PWD/pdfdebugwidget/pdfdebugscene.h 
    $$PWD/pdfdebugwidget/pdfdebugitempage.h 
    $$PWD/pdfdebugwidget/pdfdebugitempin.h 
    $$PWD/pdfdebugwidget/pdfdebugitemtextbox.h 
    $$PWD/model/pdfdatasheet.h 
    $$PWD/model/pdfpage.h 
    $$PWD/model/pdftextbox.h 
    $$PWD/model/pdfpin.h 
    $$PWD/model/pdfcomponent.h 
    $$PWD/controller/pdfloader.h

LIBS  = -L"$$PWD/../../bin"
LIBS  = -L"$$PWD/dll/jpeg62.dll"
LIBS  = -L"$$PWD/dll/libfreetype-6.dll"
LIBS  = -L"$$PWD/dll/libopenjp2.dll"
LIBS  = -L"$$PWD/dll/libpng12.dll"
LIBS  = -L"$$PWD/dll/libpoppler-80.dll"
LIBS  = -L"$$PWD/dll/libpoppler-qt5.dll"
LIBS  = -L"$$PWD/dll/libtiff3.dll"
LIBS  = -L"$$PWD/dll/zlib1.dll"

INCLUDEPATH  = $$PWD/../../


LIBS  = -lkicad

macx {
    LIBS  = -L /usr/local/lib
    INCLUDEPATH  = /usr/local/include 
}
  

тем не менее, когда я пытаюсь создать проект, я получаю эти ошибки… я не уверен, что я делаю не так или чего не хватает

введите описание изображения здесь

Ответ №1:

Согласно документации qmake, использование стандартов unix для указания связанных библиотек будет работать и в Windows. В любом случае, вместо

 LIBS  = -L"$$PWD/dll/jpeg62.dll"
  

Я бы попробовал

 LIBS  = "-L$$PWD/dll" - ljpeg62
  

или просто используйте стиль Windows:

 LIBS  = $$PWD/dll/jpeg62.dll
  

Комментарии:

1. Я использовал этот формат БИБЛИОТЕКИ = $$PWD/dll/jpeg62.dll и, похоже, это работает, спасибо

Ответ №2:

2 года спустя, но мне тоже было интересно,

 #include <QLibrary>
  

поместите вашу *.dll в папку Debug / Release. например:

сборка-тест-Desktop_Qt_6_1_2_MinGW_64_bit-Отладка/debug

теперь просто:

 QLibrary lib("myLibrary.dll");

if (!lib.load())
    qDebug() << lib.errorString();
if (lib.load())
    qDebug() << "library loaded";
  

в качестве альтернативы, вместо размещения библиотеки DLL в папке debug вы можете установить местоположение библиотеки DLL в

c:/path/to/dll/yourdll.dll