如何将Crypto ++库添加到Qt项目

我下载了Crypto ++源代码,并在Visual Studio 2013中编译了cryptlib项目,然后将生成的.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 

在将这个库添加到项目后立即构build它,并得到以下错误:

:-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文件的path)

这样做很好。 我确信所有的cryptopp头文件都在我的包含目录中, C:\Qt\5.2.1\mingw48_32\include\cryptopp

然后我试图用#include <cryptopp/aes.h>包含一个文件,并且它build立好了。 我第一次修build的时候,有40多个警告,但是第二次修build,没有任何警告。

Solutions Collecting From Web of "如何将Crypto ++库添加到Qt项目"

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

在Visual Studio下的Windows上,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 ,那么如果您的路径正常,则可能是OK。

我认为现在推荐的做法是使用cryptlib.lib作为库(到处都是同名),并根据配置更改链接器路径。 路径将是:

  • Win32,Debug: <crypto++ dir>/Win32/Debug/
  • Win64,Debug: <crypto++ dir>/x64/Debug/
  • Win32,Release: <crypto++ dir>/Win32/Release/
  • Win64,Release: <crypto++ dir>/x64/Release/

这是在Visual Studio下添加cryptlib.lib的屏幕截图。 注意它适用于所有配置:

在这里输入图像说明

以下是如何更改链接器路径,以便Visual Studio找到正确的cryptlib.lib

在这里输入图像说明

在上面, CRYPTOPP_LIB32将是一个像C:\Users\Special Services\Crypto++\Win32\的值的环境变量。 同样, CRYPTOPP_LIB64将是C:\Users\Special Services\Crypto++\x64\

不幸的是,我不知道如何在QtCreator下做这些事情。