Я боролся с похожей ситуацией: 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