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

Posted

技术标签:

【中文标题】如何将 Crypto++ 库添加到 Qt 项目【英文标题】:How to add Crypto++ library to Qt project 【发布时间】:2014-04-22 15:15:17 【问题描述】:

我下载了 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: 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 头文件都在我的包含目录中,C:\Qt\5.2.1\mingw48_32\include\cryptopp

然后我尝试包含一个带有#include <cryptopp/aes.h> 的文件,它构建得很好。我第一次构建时,有 40 多个警告,但我第二次构建时,它没有任何警告。

【问题讨论】:

我取得了一些进展,并对描述进展的问题进行了编辑。 【参考方案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.a

libcryptlibd.a(注意添加了d)可能不正确。它代表“调试”,它是多年前在 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 的屏幕截图。请注意,它适用于所有配置:

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

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

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

【讨论】:

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

以上是关于如何将 Crypto++ 库添加到 Qt 项目的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt Creator 中将 TagLib 库添加到 Linux Qt 项目?

将 FFTW 库添加到 QT 项目

如何在 QT 中将共享库添加到我的库项目中

如何将 webrtc 原生 api 添加到我的 qt 项目中?

LNK1104 将 Boost 库添加到 Qt 项目时出错

如何使用 MinGW 在 Linux 上构建 Crypto++ 库?