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

Я уже пару дней пытаюсь использовать 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

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

Том


person oracal    schedule 05.01.2011    source источник


Ответы (2)


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

Версии и исправления

  • qtsdk-2010.05
  • qca-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

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

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

person perden    schedule 24.02.2011
comment
Извините, но я отказался от этого (было довольно давно) и нашел действительно хорошую библиотеку С++ под названием Botan, которую было приятно использовать, и я рекомендую ее. Но большое спасибо за вашу помощь. Надеюсь, это поможет кому-то еще :). - person oracal; 26.02.2011

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

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

Связанная запись

person MagicR    schedule 02.11.2011