我目前正在尝试在我的Qt应用程序中运行Crypto ++。但它不起作用。希望你们中的某些人知道什么是错的,因为我还没弄明白,我现在已经3天了。
为了集中解决这个问题,我创建了一个测试应用。保留此代码:http://pastebin.com/1XMARtds取自http://programmingknowledgeblog.blogspot.de/2013/04/compiling-and-integrating-crypto-into.html
我的.pro看起来像这样:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../Savor_V100/libraries/ -lcryptlib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../Savor_V100/libraries/ -lcryptlibd
else:unix: LIBS += -L$$PWD/../Savor_V100/libraries/ -lcryptlib
INCLUDEPATH += $$PWD/../Savor_V100/includes/cryptopp562
DEPENDPATH += $$PWD/../Savor_V100/includes/cryptopp562
我使用MS Visual Studio 2012编译了库。 当我使用这些设置时:http://i.imgur.com/Nd9TEIA.png
我得到一个50mb-ish .lib文件。
当我尝试在Qt Creator(5.0.2)中构建我的应用程序时,我得到以下内容: http://i.imgur.com/RbCGQDU.png
很多:
cryptlib.lib(cryptlib.obj):-1: error: LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in main.obj
它还说:找不到文件:cryptlib.lib(cryptlib.obj)
如果我将.obj文件放在与.lib文件相同的文件夹中,我就会删除“找不到文件”错误。但没有别的变化。
有人可以解释一下我做错了什么吗?网站上的LNK2038信息对我没有帮助:(
答案 0 :(得分:2)
您链接到here的说明的第7步似乎很奇怪。通常,您分别为发布和调试选择/MD
和/MDd
,或选择/MT
和/MTd
。
关键是你将你的Release版本的加密链接到C运行时库的动态版本(通过/MD
),但你的测试exe设置为链接到静态版本(通过{{1 }})。
您应该只链接到单个版本的CRT - 即在发布模式下重新编译加密++,而/MT
设置而不是/MT
,或者更改您的测试用例以使用/MD
。< / p>
有关这些标志的更多信息,请参阅msdn docs。
答案 1 :(得分:1)
谁想在linux上运行crypto ++(我在ubuntu上做过),在通过apt-get install下载库后,应该添加到pro文件中: LIBS + = -L / usr / lib / crypto ++ -lcrypto ++ 祝你好运!