我下载了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,没有任何警告。
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
作为库(到处都是同名),并根据配置更改链接器路径。 路径将是:
<crypto++ dir>/Win32/Debug/
<crypto++ dir>/x64/Debug/
<crypto++ dir>/Win32/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下做这些事情。