我下载了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多个警告,但是第二次构建时,它没有任何警告。

最佳答案



在Windows的Visual Studio下,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下执行这些操作。

    09-09 21:04