Я боролся с подобной ситуацией: 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.
Надеюсь, это поможет!