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

4

我下载了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

添加这个库到项目后,我立即进行了构建,并出现了以下错误:
:-1: 错误:没有为目标'C:/Users/Special Services/WorkOrder/libcryptlibd.a'制定规则,需要'debug\untitled.exe'。停止。
我认为我明白这个错误是在告诉我需要一行额外的代码,所有的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头文件都在我的包含目录中,C:\Qt\5.2.1\mingw48_32\include\cryptopp 然后我尝试包含一个文件,使用#include ,构建也很好。第一次构建时有40多个警告,但第二次构建时,没有任何警告。

我取得了一些进展并在问题上添加了一个编辑,描述了这些进展。 - ozzymado
1个回答

1
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.alibcryptlibd.a(注意增加了d)可能不正确。它代表“debug”,是在Visual Studio 5.0/6.0时代使用的东西。它基于Compiling and Integrating Crypto++ into the Microsoft Visual C++ Environment。如果您将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/

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

enter image description here

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

enter image description here

在上面的代码中,CRYPTOPP_LIB32是一个环境变量,其值类似于C:\Users\Special Services\Crypto++\Win32\。同样,CRYPTOPP_LIB64C:\Users\Special Services\Crypto++\x64\
不幸的是,我不知道如何在QtCreator下完成这些事情。

我还没有尝试修复问题的机会,但我正在努力理解错误 - 是因为我包含了cryptlib.lib的发布版本而不是调试版本,而Qt期望调试版本吗?那么我需要更改IDE选项,以便它期望发布版本而不是调试版本? - ozzymado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接