我下载了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
下...或者是因为添加的行使用{ {1}},是不是Unix命令?我已经查看了这个错误的其他实例,我很确定这个问题与.pro文件中的内容有关。
修改
我决定采取不同的方法。我删除了导入添加到我的.pro文件中的库的任何内容,而只是将这行代码放在其位置:
$$PWD
(cryptlib.lib文件的路径)
这建得很好。我确保所有的cryptopp头文件都在我的include目录{{1}}
中然后我尝试使用win32:LIBS += C:\Qt\5.2.1\mingw48_32\include\cryptopp\Win32\Output\Debug\cryptlib.lib
包含一个文件,并且它构建得很好。我第一次建造时,有40多个警告,但是我第二次建造,它没有任何建造。
答案 0 :(得分: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
)可能不正确。它代表'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
作为库(到处都是同名),并根据配置更改链接器路径。路径是:
<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下做这些事情。