Crypto++ 无法构建 Qt 应用程序

Posted

技术标签:

【中文标题】Crypto++ 无法构建 Qt 应用程序【英文标题】:Crypto++ can't build Qt Application 【发布时间】:2013-06-12 00:35:21 【问题描述】:

我目前正尝试在我的 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 的 .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 信息对我没有帮助:(

【问题讨论】:

【参考方案1】:

您链接到here 的说明的第 7 步似乎很奇怪。通常,您会分别选择 /MD/MDd 用于发布和调试,您会选择 /MT/MTd

关键是您的加密发布版本链接到 C 运行时库的动态版本(通过/MD),但您的测试 exe 设置为链接到静态版本(通过/MT)。

您应该只链接到单个版本的 CRT - 即在发布模式下重新编译 crypto++,设置 /MT 而不是 /MD,或者将您的测试 exe 更改为使用 /MD

有关这些标志的更多信息,请参阅msdn docs。

【讨论】:

【参考方案2】:

谁想在 linux 上运行 crypto++(我在 ubuntu 上做过),通过 apt-get install 下载库后,应该在 pro 文件中添加: LIBS += -L/usr/lib/crypto++ -lcrypto++ 祝你好运!

【讨论】:

以上是关于Crypto++ 无法构建 Qt 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 macdeployqt 构建 QSqlDatabase 的 Qt 应用程序无法正常工作

基于 MAC 10.7.4 构建的 Qt 应用程序无法在 10.6 上运行

为 Qt 构建和安装 MySql 驱动程序后,无法加载 MySql 驱动程序

由于未定义的引用,无法链接到 Debian 上的 Crypto++

使用 minGW 构建 crypto562

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