Проблема при установке плагина QCA-OSSL (часть криптографической архитектуры Qt) в Windows 7 - PullRequest
4 голосов
/ 06 января 2011

Я уже пару дней пытаюсь использовать QCA ( Link ) на моем ПК с Windows, отлично работает на моем Linux-компьютере, просто не могу заставить его работать с Windows.

Итак, я следовал всем инструкциям по установке QCA, а затем подключил плагин ossl для QCA.QCA работает нормально, но по какой-то причине плагин не отображается в моем Qt Creator, и я не могу использовать некоторые функции в плагине.

Я использовал qcatool2.exe, который поставляется с QCA дляпроверьте мои плагины, используя

qcatool2 plugins --debug

и получите это сообщение об ошибке:

plugin: qca-ossl2.dll: failed to load: The plugin 'C:/Qt/2010.05/qt/plugins/crypto/qca-ossl2.dll' uses incompatible Qt library. Expected build key "Windows mingw debug full-config", got "Windows mingw release full-config"

Теперь мне кажется, что qt требует, чтобы плагин компилировался в отладкережим (чтобы ключ сборки содержал отладочную, а не выпускную версию), поэтому я добавил

CONFIG += debug

в файл проекта моего плагина и запустил qmake и mingw32-make как обычно, но, похоже, это не дало эффекта.

Файл моего проекта для плагина теперь:

TEMPLATE = lib
CONFIG += plugin
QT -= gui
DESTDIR = lib

VERSION = 2.0.0

unix:include(conf.pri)
windows:CONFIG += crypto
windows:include(conf_win.pri)

CONFIG += create_prl

SOURCES = qca-ossl.cpp

windows:{
load(winlocal.prf)
isEmpty(WINLOCAL_PREFIX) {
error("WINLOCAL_PREFIX not found. See http://delta.affinix.com/platform/#winlocal")
}

OPENSSL_PREFIX = $$WINLOCAL_PREFIX
DEFINES += OSSL_097

INCLUDEPATH += $$OPENSSL_PREFIX/include
LIBS += -L$$OPENSSL_PREFIX/lib
LIBS += -llibeay32 -lssleay32
LIBS += -lgdi32 -lwsock32
}

!debug_and_release|build_pass {
CONFIG(debug, debug|release) {
mac:TARGET = $$member(TARGET, 0)_debug
windows:TARGET = $$member(TARGET, 0)d
}
}

CONFIG += debug

У кого-нибудь есть идеи?Если вам нужны подробности, просто спросите, я постарался быть максимально тщательным.Спасибо

Том

Ответы [ 2 ]

5 голосов
/ 24 февраля 2011

Я боролся с подобной ситуацией: qca-ossl прекрасно работает на Linux, а не на Windows. Я только что совершил прорыв, который также может помочь вам.

Версии и патчи

  • qtsdk-2010,05
  • КК-2.0.3
  • qca-ossl-r1190163 (из хранилища)
  • OpenSSL-1.0.0b

Прежде всего, если вы используете более новую версию (0.9.7+, я думаю) OpenSsl, вам может понадобиться использовать версию qca-ossl из репозитория, так как она исправляет некоторые несовместимости. Мне также нужно было закомментировать некоторые строки в новом файле qca-ossl.cpp, относящиеся к SHA224, SHA256, SHA384 и SHA512, чтобы избежать ошибок сборки. Я использую qca-ossl для шифров, так что я не беспокоюсь о хешировании и не очень много исследую ошибки.

Исправление

Для меня проблемы сборки Windows были многократными, но большинство из них проистекают из некачественной установки сборки для версии плагина для Windows. Приятно иметь небольшой скрипт настройки для Linux, но как насчет Windows? Нам нужно проделать небольшую дополнительную работу.

Часть этой дополнительной работы связана с тем, что я выбрал нестандартные места для библиотек поддержки своего приложения. Qca и OpenSsl существуют в структуре каталогов проекта в каталоге library /. Я предполагаю, что вы сделали что-то похожее, если пытаетесь кросс-компилировать приложение, но даже если вы этого не сделали, следующее должно помочь.

Поиск OpenSsl

Qca-ossl не будет собираться очень хорошо, если не сможет найти библиотеку, к которой должен подключиться ... :) Итак, давайте уточним, где она находится. Закомментируйте строки, относящиеся к winlocal.prf, и связанные с этим изменения в qca-ossl.pro. Мы прямо укажем, где найти openSsl.

TEMPLATE = lib
CONFIG += plugin
QT -= gui
DESTDIR = lib

VERSION = 2.0.0

unix:include(conf.pri)
windows:CONFIG += crypto
windows:include(conf_win.pri)

CONFIG += create_prl

SOURCES = qca-ossl.cpp

windows:{
# Rather than rely on the winlocal.prf file, we will specify the location of the openssl
# by hand when running qmake.
#
# load(winlocal.prf)
# isEmpty(WINLOCAL_PREFIX) {
# error("WINLOCAL_PREFIX not found. See http://delta.affinix.com/platform/#winlocal")
# }
#
# OPENSSL_PREFIX = $$WINLOCAL_PREFIX
DEFINES += OSSL_097

INCLUDEPATH += $$OPENSSL_PREFIX/include
LIBS += -L$$OPENSSL_PREFIX/lib
LIBS += -llibeay32 -lssleay32
LIBS += -lgdi32 -lwsock32
}

!debug_and_release|build_pass {
CONFIG(debug, debug|release) {
mac:TARGET = $$member(TARGET, 0)_debug
windows:TARGET = $$member(TARGET, 0)d
}
}

Теперь у нас есть прямой доступ к переменной среды $$ OPENSSL_PREFIX в файле .pro. Мы можем установить его, когда вызываем qmake, выполнив следующее.

qmake.exe "OPENSSL_PREFIX=C:/path/to/openssl-1.0.0b"

Вы должны иметь возможность использовать обратную или прямую косую черту. Здесь я выбираю форвард, поскольку Qt устарела с 4.7.

Кроме того, вы можете установить переменную OPENSSL_PREFIX непосредственно в файле .pro.

Нахождение Qca

После сравнения сборочных файлов unix и windows для qca-ossl, как ни странно, он никогда не включает библиотеки qca для сборки или компоновки! ?!?! Это привело к ошибке «Неопределенный интерфейс» в строке Q_INTERFACES (QCAPlugin) определения класса opensslPlugin в конце qca-ossl.cpp.

Чтобы избежать этого, нам нужно будет явно определить пути включения и библиотеки вручную. Расширяя строку qmake из последнего раздела, последняя строка qmake выглядит следующим образом.

qmake.exe "OPENSSL_PREFIX=C:/path/to/openssl-1.0.0b" "INCLUDEPATH+=C:/path/to/qca-2.0.3/include/QtCrypto" "LIBS+=-LC:/path/to/qca-2.0.3/lib -lqca2"

"Установка" Qca-ossl

После запуска строки qmake, приведенной выше, и запуска простой старой сборки вам необходимо установить Qca-ossl. Вы можете скопировать полученный dll из каталога lib / в каталог плагинов вашего Qt, который, если вы используете мои версии, по умолчанию является C: \ Qt \ 2010.05 \ qt \ plugins \ crypto. Кроме того, вы можете переместить его в крипто-каталог, который находится на корневом уровне структуры каталогов вашего проекта, например C: \ path \ to \ my \ project \ crypto.

Надеюсь, это поможет!

0 голосов
/ 02 ноября 2011

На самом деле, вы можете попробовать этот урок QCA + OpenSSL в Window . Это хорошо работает.

Кстати, я могу использовать QCA с AES 256 на Window. Но я не могу использовать его на Symbian. Есть идеи сделать это?

Похожие сообщения

...