В настоящее время я пытаюсь запустить Crypto ++ в моем приложении Qt. Но это не работает. Надеюсь, кто-то из вас знает, что не так, потому что я не понял, и я занимаюсь этим уже 3 дня.
Чтобы сконцентрировать проблему, я создал тестовое приложение. Удерживая этот код: http://pastebin.com/1XMARtds взято из http://programmingknowledgeblog.blogspot.de/2013/04/compiling-and-integrating-crypto-into.html
Мой .pro выглядит так:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../Savor_V100/libraries/ -lcryptlib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../Savor_V100/libraries/ -lcryptlibd
else:unix: LIBS += -L$$PWD/../Savor_V100/libraries/ -lcryptlib
INCLUDEPATH += $$PWD/../Savor_V100/includes/cryptopp562
DEPENDPATH += $$PWD/../Savor_V100/includes/cryptopp562
Я скомпилировал библиотеку с MS Visual Studio 2012.
Когда я использую эти настройки: http://i.imgur.com/Nd9TEIA.png
Я получаю один файл .lib 50 МБ.
Когда я пытаюсь собрать свое приложение в Qt Creator (5.0.2), я получаю следующее:
http://i.imgur.com/RbCGQDU.png
Много:
cryptlib.lib(cryptlib.obj):-1: error: LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in main.obj
Там также написано: Файл не найден: cryptlib.lib (cryptlib.obj)
Если я помещаю файлы .obj в ту же папку, что и файл .lib, я избавляюсь от ошибок «файл не найден». Но больше ничего не меняется.
Может кто-нибудь объяснить, что я делаю не так? Информация LNK2038 на сайте мне не помогает 🙁
Шаг 7 инструкций, на которые вы ссылались Вот кажется странным. Обычно вы бы выбрали /MD
а также /MDd
для Release и Debug соответственно, или же вы бы выбрали /MT
а также /MTd
,
Суть в том, что ваша криптографическая сборка Release связана с динамической версией библиотеки C Runtime (через /MD
), но ваш тестовый файл установлен на ссылку на статическую версию (через /MT
).
Вы должны ссылаться только на одну версию CRT — то есть перекомпилировать crypto ++ в режиме Release с /MT
установить вместо /MD
или измените свой тестовый exe для использования /MD
,
Для получения дополнительной информации об этих флагах см. MSDN документы.
Кто хочет запустить crypto ++ в linux (я это сделал в ubuntu), после загрузки библиотеки через apt-get install, должен добавить в pro file это:
LIBS + = -L / usr / lib / crypto ++ -lcrypto ++
Удачи!