【问题标题】:Problem installing QCA-OSSL (part of the Qt Cryptographic Architecture) plugin on Windows 7在 Windows 7 上安装 QCA-OSSL(Qt Cryptographic Architecture 的一部分)插件时出现问题
【发布时间】:2011-06-04 07:44:35
【问题描述】:

我已经尝试在我的 Windows PC 上使用 QCA (Link) 几天了,在我的 linux 机器上运行良好,只是无法让它在 Windows 上运行。

所以我按照安装 QCA 和 QCA 的 ossl 插件的所有说明进行操作。 QCA 工作正常,但由于某种原因,该插件没有出现在我的 Qt Creator 中,我也无法使用插件中的某些功能。

我使用 QCA 附带的 qcatool2.exe 来检查我的插件使用

qcatool2 plugins --debug

并收到此错误消息:

plugin: qca-ossl2.dll: failed to load: The plugin 'C:/Qt/2010.05/qt/plugins/crypto/qca-ossl2.dll' uses incompatible Qt library. Expected build key "Windows mingw debug full-config", got "Windows mingw release full-config"

现在在我看来,好像 qt 需要在调试模式下编译插件(为了让构建密钥包含调试而不是发布)所以我添加了

CONFIG += debug

到我的插件的项目文件并像往常一样运行 qmake 和 mingw32-make 但这似乎没有任何效果。

我的插件项目文件现在是:

TEMPLATE = lib
CONFIG += plugin
QT -= gui
DESTDIR = lib

VERSION = 2.0.0

unix:include(conf.pri)
windows:CONFIG += crypto
windows:include(conf_win.pri)

CONFIG += create_prl

SOURCES = qca-ossl.cpp

windows:{
load(winlocal.prf)
isEmpty(WINLOCAL_PREFIX) {
error("WINLOCAL_PREFIX not found. See http://delta.affinix.com/platform/#winlocal")
}

OPENSSL_PREFIX = $$WINLOCAL_PREFIX
DEFINES += OSSL_097

INCLUDEPATH += $$OPENSSL_PREFIX/include
LIBS += -L$$OPENSSL_PREFIX/lib
LIBS += -llibeay32 -lssleay32
LIBS += -lgdi32 -lwsock32
}

!debug_and_release|build_pass {
CONFIG(debug, debug|release) {
mac:TARGET = $$member(TARGET, 0)_debug
windows:TARGET = $$member(TARGET, 0)d
}
}

CONFIG += debug

有人有什么想法吗?如果您需要更多详细信息,请询问,我已尝试尽可能彻底。谢谢

汤姆

【问题讨论】:

    标签: c++ qt plugins qmake mingw32


    【解决方案1】:

    我一直在为类似的情况而苦苦挣扎:qca-ossl 在 linux 上构建良好,而在 Windows 上则完全不行。我刚刚取得了一个突破,这也可能对您有所帮助。

    版本和补丁

    • qtsdk-2010.05
    • qca-2.0.3
    • qca-ossl-r1190163(来自存储库)
    • openssl-1.0.0b

    首先,如果您使用的是 OpenSsl 的更新版本(我认为是 0.9.7+),您可能需要使用存储库中的 qca-ossl 版本,因为它修补了一些不兼容问题。我还需要在处理 SHA224、SHA256、SHA384 和 SHA512 的新 qca-ossl.cpp 文件中注释掉一些行以避免构建错误。我正在使用 qca-ossl 作为密码,所以我不担心散列,也没有对错误进行太多调查。

    修复它

    windows 构建问题对我来说有很多问题,但其中大部分源于 windows 版本插件的劣质构建设置。很高兴为 linux 提供一些配置脚本,但是 windows 呢?我们需要做一些额外的工作。

    其中一些额外的工作是因为我为我的应用程序的支持库选择了非标准位置。 Qca 和 OpenSsl 都存在于项目目录结构的 library/ 目录中。我的猜测是,如果您尝试交叉编译您的应用程序,您已经做了类似的事情,但即使您没有以下操作也应该有所帮助。

    寻找 OpenSsl

    如果 Qca-ossl 找不到它应该连接的库,它就不会构建得很好...... :) 所以让我们直接指定它在哪里。在 qca-ossl.pro 中注释掉与 winlocal.prf 相关的行以及由此产生的更改。我们将直接指定在哪里找到openSsl。

    TEMPLATE = lib
    CONFIG += plugin
    QT -= gui
    DESTDIR = lib
    
    VERSION = 2.0.0
    
    unix:include(conf.pri)
    windows:CONFIG += crypto
    windows:include(conf_win.pri)
    
    CONFIG += create_prl
    
    SOURCES = qca-ossl.cpp
    
    windows:{
    # Rather than rely on the winlocal.prf file, we will specify the location of the openssl
    # by hand when running qmake.
    #
    # load(winlocal.prf)
    # isEmpty(WINLOCAL_PREFIX) {
    # error("WINLOCAL_PREFIX not found. See http://delta.affinix.com/platform/#winlocal")
    # }
    #
    # OPENSSL_PREFIX = $$WINLOCAL_PREFIX
    DEFINES += OSSL_097
    
    INCLUDEPATH += $$OPENSSL_PREFIX/include
    LIBS += -L$$OPENSSL_PREFIX/lib
    LIBS += -llibeay32 -lssleay32
    LIBS += -lgdi32 -lwsock32
    }
    
    !debug_and_release|build_pass {
    CONFIG(debug, debug|release) {
    mac:TARGET = $$member(TARGET, 0)_debug
    windows:TARGET = $$member(TARGET, 0)d
    }
    }
    

    现在我们可以直接访问 .pro 文件中的 $$OPENSSL_PREFIX 环境变量。我们可以在调用 qmake 时设置它,方法如下。

    qmake.exe "OPENSSL_PREFIX=C:/path/to/openssl-1.0.0b"

    您应该能够使用反斜杠或正斜杠。在这里我选择向前,因为 Qt 自 4.7 起已弃用它们。

    或者,您可以直接在 .pro 文件中设置 OPENSSL_PREFIX 变量。

    寻找 Qca

    在比较了 qca-ossl 的 unix 和 windows makefile 之后,奇怪的是,它从未包含用于构建或链接的 qca 库! ?!?!这导致 qca-ossl.cpp 末尾的 opensslPlugin 类定义的 Q_INTERFACES(QCAPlugin) 行出现“未定义接口”错误。

    为避免这种情况,我们需要手动显式定义包含和库路径。扩展上一节的 qmake 行,最终的 qmake 行如下。

    qmake.exe "OPENSSL_PREFIX=C:/path/to/openssl-1.0.0b" "INCLUDEPATH+=C:/path/to/qca-2.0.3/include/QtCrypto" "LIBS+=-LC:/path/to/qca-2.0.3/lib -lqca2"

    “安装”Qca-ossl

    在运行上面的 qmake 行并运行一个普通的 ol' make 之后,您需要安装 Qca-ossl。您可以将生成的 dll 从 lib/ 目录复制到 Qt 的插件目录,如果您使用我的版本,则默认为 C:\Qt\2010.05\qt\plugins\crypto。或者,您可以将其移动到项目目录结构的根级别的加密目录,例如 C:\path\to\my\project\crypto。

    我希望这会有所帮助!

    【讨论】:

    • 很抱歉,但我放弃了(很久以前),并找到了一个非常好的 c++ 库,名为 Botan,使用起来很愉快,并会推荐它。但非常感谢您的帮助。希望这对其他人有所帮助:)。
    【解决方案2】:

    其实你可以试试这个教程QCA+OpenSSL on Window。效果很好。

    顺便说一句,我可以在 Window 上使用带有 AES 256 的 QCA。但是我不能在 Symbian 上使用它。有什么想法吗?

    Related Post

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 1970-01-01
      • 2012-10-12
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      相关资源
      最近更新 更多