пятница, 31 октября 2014 г.

SQLCipher и Qt - часть вторая, Windows (MinGW)

Переходим к сборке плагина для базы данных в Windows, используя Qt 5.3.2 с 32-битным набором компиляторов MinGW 4.8.2. Никакого способа автоматической сборки проекта qt5-sqlcipher под Windows я не придумал, поскольку требуется запускать скрипт configure из MSYS - как это сделать из проекта Qt, я не знаю. Придется компилировать SQLCipher вручную. Для сборки его под Windows требуется много всего.

Устанавливаем готовую библиотеку OpenSSL отсюда (ссылка взята с сайта OpenSSL). Внимание - ставить нужно полную версию, а не Light, поскольку нам нужны заголовочные файлы и статическая библиотека для компоновки. При установке OpenSSL ругается по поводу отсутствия "Microsoft Visual C++ 2008 Redistributable". Ставим пакет отсюда, OpenSSL почему-то продолжает ругаться, но работает. В моем случае OpenSSL установилась в каталог C:\OpenSSL-Win32, пути дальше указаны для такого варианта.

Устанавливаем MSYS - я поставил 1.0.11 в варианте "все в одном". При установке указываем путь к уже имеющемуся MinGW (в составе Qt, в моем случае это C:\Qt\Tools\mingw482_32).

Устанавливаем Tcl/Tk - я поставил ActiveTcl Community Edition для x86.

Перезагружаемся, чтобы добавленные пути гарантированно присутствовали в переменной PATH.

Скачиваем qt5-sqlcipher и сам SQLCipher, если не установлен Git, можно взять ZIP-архивы. Структура каталогов такая же, как под Linux и Mac OS X - каталог с проектом qt5-sqlcipher, в нем подкаталог sqlcipher с исходниками SQLCipher.

Запускаем MSYS, переходим в каталог sqlcipher. Запускаем следующие команды:

make clean
./configure --enable-tempstore=yes --disable-tcl --with-crypto-lib=none CFLAGS="-DSQLITE_HAS_CODEC -I/c/OpenSSL-Win32/include" LDFLAGS="-L/c/OpenSSL-Win32/lib/MinGW" LIBS="-leay32"
make


Команда make clean необходима, только если были предыдущие попытки сборки. Ключ --with-crypto-lib=none для configure нужен, поскольку скрипт не находит OpenSSL, никак (похоже, он ищет libcrypto, а под Windows ее нет, есть libeay32). Результатом успешной работы make будет библиотека libsqlcipher в подкаталоге .libs (именно так, с точкой в начале) каталога sqlcipher. Копируем в этот подкаталог библиотеку libeay32.a из C:\OpenSSL-Win32\lib\MinGW.

Правим файл проекта qsqlcipher.pro. Комментируем строку с командой для сборки SQLCipher (мы его уже собрали вручную, а запуск make приведет к ошибке):

#sqlcipher.commands = $(MAKE) -C $$PWD/sqlcipher install

Добавляем:

win32 {
    INCLUDEPATH += $$PWD/sqlcipher
    LIBS -= -lcrypto
    LIBS += -L $$PWD/sqlcipher/.libs -leay32
}

После этого проект должен собраться. Как и в других системах, копируем готовый плагин qsqlcipher.dll из подкаталога plugins/sqldrivers в соответствующий подкаталог плагинов Qt и проверяем. Работает, как это ни удивительно.

1 комментарий:

  1. Спасибо огромное за статью, не все прошло гладко, но библиотеку получить удалось) метод работает

    ОтветитьУдалить