Как добавить библиотеку Crypto++ в проект Qt

Я скачал исходный код Crypto++ и скомпилировал проект cryptlib в Visual Studio 2013, а затем добавил сгенерированный файл .lib в свой проект Qt, в результате чего мой файл .pro выглядел так:

QT       += core gui

QT += sql

greaterThan(QT_MAJOR_VERSION, 4):QT += widgets

TARGET = untitled
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h \
        databasecontrol.h \
    test.h

FORMS    += mainwindow.ui

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/ -lcryptlib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/ -lcryptlibd
else:unix: LIBS += -L$$PWD/ -lcryptlib

INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/

win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/libcryptlib.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/libcryptlibd.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/cryptlib.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/cryptlibd.lib
else:unix: PRE_TARGETDEPS += $$PWD/libcryptlib.a

Сразу после добавления этой библиотеки в проект я ее собираю и получаю следующую ошибку:

:-1: error: No rule to make target 'C:/Users/Special Services/WorkOrder/libcryptlibd.a', needed by 'debug\untitled.exe'. Stop.

Кажется, я понимаю, что ошибка говорит мне, что мне нужна дополнительная строка, где все строки else:win32 находятся под DEPENDPATH... или это потому, что добавленные строки используют $$PWD, разве это не команда Unix? Я просмотрел другие случаи этой ошибки, и я вполне уверен, что проблема связана с чем-то в файле .pro здесь.

ИЗМЕНИТЬ:

Я решил использовать другой подход. Я избавился от всего, что добавлялось в мой файл .pro при импорте библиотеки, и вместо этого просто поместил эту строку кода на свое место:

win32:LIBS += C:\Qt\5.2.1\mingw48_32\include\cryptopp\Win32\Output\Debug\cryptlib.lib (Путь к файлу cryptlib.lib)

Это построено просто отлично. Я убедился, что все файлы заголовков cryptopp находятся в моем каталоге include, C:\Qt\5.2.1\mingw48_32\include\cryptopp

Затем я попытался включить файл с #include <cryptopp/aes.h>, и он отлично сработал. В первый раз, когда я собирал, было более 40 предупреждений, но во второй раз, когда я собирал, он собирался без них.


person Lighthat    schedule 22.04.2014    source источник
comment
Я добился некоторого прогресса и добавил правку в вопрос, описывающий прогресс.   -  person Lighthat    schedule 25.04.2014


Ответы (1)


win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/libcryptlib.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/libcryptlibd.a

В Windows под Visual Studio имя библиотеки Crypto++ — cryptlib.lib, а не libcryptlib.a. Если вы использовали Cygwin (чего я не думаю), то имя было бы libcryptopp.a.

libcryptlibd.a (обратите внимание на добавление d), вероятно, неверно. Это означает «отладка», и это то, что использовалось много лет назад в дни Visual Studio 5.0/6.0. Он был основан на компиляции и интеграции Crypto++ в Среда Microsoft Visual C++. Если вы переименовали Win32/Debug/cryptlib.lib в Win32/Debug/cryptlibd.lib, то, вероятно, все в порядке, если ваши пути в порядке.

Я думаю, что сейчас рекомендуется использовать cryptlib.lib в качестве библиотеки (везде одно и то же имя) и изменять пути компоновщика на основе конфигурации. Пути будут такими:

  • Win32, отладка: <crypto++ dir>/Win32/Debug/
  • Win64, отладка: <crypto++ dir>/x64/Debug/
  • Win32, выпуск: <crypto++ dir>/Win32/Release/
  • Win64, выпуск: <crypto++ dir>/x64/Release/

Вот снимок экрана добавления cryptlib.lib в Visual Studio. Обратите внимание, что это относится ко всем конфигурациям:

введите здесь описание изображения

А вот как изменить пути компоновщика, чтобы Visual Studio нашла правильный cryptlib.lib:

введите здесь описание изображения

В приведенном выше примере CRYPTOPP_LIB32 будет переменной окружения со значением, подобным C:\Users\Special Services\Crypto++\Win32\. Точно так же CRYPTOPP_LIB64 будет C:\Users\Special Services\Crypto++\x64\

К сожалению, я не знаю, как это сделать в QtCreator.

person jww    schedule 22.04.2014
comment
У меня пока нет возможности попытаться исправить проблему, но я пытаюсь понять ошибку - это потому, что я включил релизную версию cryptlib.lib вместо отладочной версии, а Qt был Ожидаете отладочную версию? Итак, мне нужно изменить параметры IDE, чтобы он ожидал версию выпуска вместо версии отладки? - person Lighthat; 23.04.2014