在Windows 7上运行QCA(Qt C ++加密库)出现问题

3

我正在使用Windows 7上的Qt 4.8.1、MinGW编译器和Qt Creator。我想向我的项目中添加一个加密/解密库。在搜索了几天互联网后,我找到了QCA。幸运的是,我发现了一个预编译的版本,它使用了与我相同的C++编译器,并且还有所需的插件的预编译版本。 我按照说明将QCA库添加到我的项目中。我使用了类似于这样的代码来使用AES进行加密:

QCA::Initializer init = QCA::Initializer();

//Here where the execution stops
QCA::SymmetricKey key = QCA::SymmetricKey(16);

QCA::InitializationVector iv = QCA::InitializationVector(16);

QCA::Cipher cipher = QCA::Cipher(QString("aes128"), QCA::Cipher::CBC,
                                 QCA::Cipher::DefaultPadding, QCA::Encode,
                                 key, iv);

if (!QCA::isSupported("aes128-cbc-pkcs7"))
{
    qDebug() << "AES128 is not supported";
    return;
}

代码可以成功编译,但运行应用程序时出现未知原因的停止。
我真的对这个错误感到非常疲倦,如果有人能帮忙解决,将不胜感激。

1
你尝试过连接调试器查找原因吗? - SilverbackNet
是的,我有。在调试时,当我到达我在问题中提到的那一行时,我会收到一个消息框,上面写着:“进程停止,因为它从操作系统接收到一个信号。信号名称:SIGSEGV 信号含义:分段错误”。 应用程序输出显示:“(内部错误:在psymtab中读取pc 0x201,但不在symtab中。)”。我做错了什么? - Ramez
1
很遗憾,这表明存在gdb的错误,所以除非你能找到或编译更新版本,否则你可能无法进行调试。你正在使用最新版本吗?(目前是gcc 4.7.0.1和gdb 7.5.1。) - SilverbackNet
1个回答

3

对于可能会遇到此问题的未来程序员

QCA在运行时加载插件,因此即使编译正常,如果插件不在可搜索的文件夹中,它也不会加载。

您可以通过调用qDebug() << QCA::supportedFeatures();检查是否存在该问题。如果插件没有被加载,您将会得到类似以下内容:

("random", "md5", "sha1", "keystorelist")

通过调用以下命令,您应该能够查看QCA正在查找的文件夹:

qDebug("%s", QCA::pluginDiagnosticText().toUtf8().constData());

显然,插件必须放置在库根目录下的名为crypto的子目录中。

您可以使用以下命令检查Qt查找库时的所有路径:

qDebug() << QCoreApplication::instance()->libraryPaths();

这份文档可能包含一些有用的信息:http://doc.qt.io/qt-4.8/qpluginloader.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接