Создание динамической библиотеки
Оглавление
Следующий пример демонстрирует создание динамической библиотеки, содержащей только одну функцию.
TEMPLATE = lib
DESTDIR = ..
QT -= gui
SOURCES = dynlib.cpp
HEADERS = dynlib.h
TARGET = dynlib
Обратите внимание на файл проекта. Для создания динамической библиотеки нужно установить в секции TEMPLATE значение lib. Расположение готовой библиотеки будет на один уровень выше каталога с ее исходными файлами, для этого DESTDIR мы зададим равным "..".
Ввиду того, что создаваемая библиотека не нуждается в элементах пользовательского интерфейса, мы сделаем так, чтобы они были изъяты из компоновки, для чего мы с помощью оператора -= исключаем опцию gui в секции QT.
#include <QString>
extern "C" {
QString oddUpper(const QString& str);
}
В динамическую библиотеку должны быть экспортированы прототипы функций для их дальнейшего использования. Эти функции необходимо заключить в спецификатор extern "C" {...}. В этом случае компилятор C++ не будет прикреплять информацию о типе к символьной сигнатуре функции. Без этого спецификатора компилятор может подставить вместо имени функции oddUpper() совсем другое имя, в котором будет закодирована дополнительная информация. Это нужно, если вы хотите, чтобы вашу динамическую библиотеку можно было загружать в процессе работы основной программы, например, при помощи класса QLibrary, о котором речь пойдет далее.
#include "dynlib.h"
QString oddUpper(const QString& str)
{
QString strTemp;
for (int i = 0; i < str.length(); ++i) {
strTemp += (i % 2) ? str.at(i) : str.at(i).toUpper();
}
return strTemp;
}
Функции преобразует каждый нечетный символ переданной строки в заглавный и возвращает полученный результат.
Читать далее: Использование динамических библиотек в Qt