How to create a library with Qt and use it in an application/ru

From Qt Wiki
Jump to navigation Jump to search

Русский English Español

Введение

Это руководство иллюстрирует разные подходы к созданию и применению пользовательских библиотек в приложении на Windows. Первая часть объясняет, как создать совместно используемую библиотеку и как присоединить ее к приложению. Вторая часть, о создании и использовании статической библиотеки.

Создание разделяемой библиотеки

При создании совместно используемой библиотеки, которую бы вы хотели присоединить, необходимо удостовериться, что символы, которые будут использованы за пределами библиотеки, будут должным образом экспортироваться после создания библиотеки. В последствии они будут импортированы при присоединении. Это может быть сделано, с помощбю Q_DECL_EXPORT [qt.io] и Q_DECL_IMPORT [qt.io] как показано в следующем примере:

test.h

test.cpp

test.pro

См. также документацию описывающую Создание Совместно используемых Библиотек [qt.io].

Присоединение разделяемой библиотеки к приложению

Чтобы использовать разделяемую библиотеку в приложении, вы можете включить ее заголовок в ваш код и использовать доступные методы. Скомпилируйте и соберите с.lib файл. Во время выполнения будет загружена dll, у которой имеется реализация.

Для успешной сборки, в файле .pro необходимо сообщить приложению, где найти заголовки и библиотеки. INCLUDEPATH [qt.io] должен указывать на каталог, где находятся заголовки, и LIBS [qt.io] переменная должна указывать на каталог с .lib файлом. Кроме того, необходимо удостовериться, что .dll будет находиться в указанном месте или помещена в каталог приложения или путь к ней описан в переменной PATH.

Для примера:

loadTestLib.pro

main.cpp

Использование QLibrary, для загрузки разделяемых библиотек

QLibrary [qt.io] может использоваться для загрузки разделяемых библиотек в момент выполнения. В этом случае достаточно иметь доступ только к .dll, доступ к заголовкам и .lib файлу(ам) не требуется.

Следующий пример показывает, как установить библиотеку для использования с QLibrary. Для разрешения имен функций, они должны быть экспортированы из библиотеки как C функции (т.е. без искажения имени). Это означает, что функции должны быть обернуты в блок extern “C”, в случае если библиотека скомпилирована компилятором C++.

Вот как делается это на Windows, также необходимо явно экспортировать функцию для использования DLL Q_DECL_EXPORT [qt.io] и Q_DECL_IMPORT [qt.io]

qlibraryLibrary.pro

widget.h

widget.cpp

Загрузка библиотеки, используя QLibrary

Чтобы загрузить библиотеку, используя QLibrary, можете просто передать .dll в конструктор QLibrary. Удостоверьтесь, что .dll доступна в каталоге приложения или в переменной PATH. Для того чтобы воспользоваться функциями библиотеки в приложении, вы должны разрешить их использование QLibrary::resolve() [qt.io].

Следующий пример загружает выше-созданную библиотеку, и использует одну из ее функций, для создания и отображения виджета.

Создание статической библиотеки

При создании статической библиотеки необходимо определить опцию staticlib CONFIG [qt.io] в .pro файле. В отличие от примера разделяемой библиотеки, в .h файле не требуется устанавливать никаких специальных символов для экспорта и импорта, потому как библиотека будет встроена в приложение, например:

test.pro

Использование статической библиотеки в приложении

Подобно тому, как мы сделали это при загрузке разделяемой библиотеки, необходимо описать INCLUDEPATH [qt.io], чтобы указать на каталог, где установлены заголовки и LIBS [qt.io] переменную, чтобы указать на .lib файл, например:

useStaticLib.pro

main.cpp

Какой подход выбрать

Принятие решения о том, какой подход выбрать, зависит от Ваших потребностей.

При создании разделяемой библиотеки потребуется установить ее в целевой системе вместе с приложением. Преимущество: приложения собранные на разделяемых библиотеках, маленькие. Это независит от того, что используется для загрузки .dll, QLibrary или просто стандартное подключение. Важно, имеете ли вы доступ к заголовочным и .lib файлам или нет. Если доступа не имеете, тогда QLibrary -ваш выбор. Недостаток в том, что при отсутствии разделяемой библиотеки в системе приложение работать не будет.

Статическое подключение позволяет создать автономно исполняемую программу. Преимущество состоит в том, что для работы программы вам необходимо будет установить только несколько файлов. Недостаток в том, что исполняемые программы большие.

См. Документацию развертывания [doc-snapshot.qt.io] для детального ознакомления о разделяемых и статических сборках.

Categories: