【发布时间】:2013-06-09 17:54:21
【问题描述】:
我现在有点卡住了一个小示例项目,我想运行它来测试我想在主项目中使用的一些密码学。
基本上我使用的是最新的 Qt Creator,并创建了一个简单的窗口对话框。此外,我想通过CkCrypt2 测试PBKDF2 实现
所以我所做的是下载 X64 版本的库并将其添加到我的项目文件夹中。然后我告诉我的 Qt 项目使用外部库,最终的 .pro 文件如下所示:
#-------------------------------------------------
#
# Project created by QtCreator 2013-06-09T18:09:44
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = crypt2test
TEMPLATE = app
SOURCES += main.cpp\
m
ainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libs/ -lChilkatDbgDll_x64
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libs/ -lChilkatDbgDll_x64d
else:unix: LIBS += -L$$PWD/libs/ -lChilkatDbgDll_x64
INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include
我可以成功加载库,但无法启动应用程序。
我的 mainwindow.cpp 看起来像这样:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "CkCrypt2.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
CkCrypt2 crypt;
bool success;
success = crypt.UnlockComponent("Just some random text ");
if ( !success )
{
qDebug() << "Not successfully unlocking the library";
}
}
MainWindow::~MainWindow()
{
delete ui;
}
我在编译器中得到的错误信息是:
c:\qt\qt5.0.2\tools\qtcreator\bin\crypt2test\include\CkString.h:127: error: C2061: syntax error : identifier 'SYSTEMTIME'
c:\qt\qt5.0.2\tools\qtcreator\bin\crypt2test\include\CkString.h:129: error: C2061: syntax error : identifier 'SYSTEMTIME'
C:\Qt\Qt5.0.2\Tools\QtCreator\bin\crypt2test\include\CkCrypt2.h:429: error: C2061: syntax error : identifier 'SYSTEMTIME'
查看我看到的文件:
void appendDateRfc822(SYSTEMTIME &sysTime);
void appendDateRfc822Gmt(SYSTEMTIME &sysTime);
// GETSIGNATURESIGNINGTIME_BEGIN
bool GetSignatureSigningTime(int index, SYSTEMTIME &outSysTime);
// GETSIGNATURESIGNINGTIME_END
好的,所以它在抱怨 SYSTEMTIME 构造。所以我查了error C2061 基本上它说:
编译器发现了一个非预期的标识符。确保 该标识符在您使用之前已声明。
这是有道理的,所以我查找SYSTEMTIME 并尝试这样做:
#include <windows.h>
但这会导致 windows.h 文件本身出现更多错误。
我在 Qt 中使用 MS Visual C++ 编译器。即使我使用 qmake。我对此很陌生,我还不完全理解。此外,我不知道如何解决这个问题,因为包含 windows.h 并没有帮助。
这里似乎有什么问题?这是关于我的编译器的问题还是我使用第三方应用程序的问题,该库是用 MS Visual C++ 编译的,我现在正试图在 Qt 的 Windows 机器上使用 Windows Visual C++ 编译器?
如有任何帮助,我将不胜感激!
EDIT1: 实际上,在清理所有和 qmake 和构建项目之后,我现在有不同的错误,并且如前所述,在 Windows.h 中没有发现任何错误。既然这么多我就截图了:http://i.imgur.com/B8EoENB.png
EDIT2: 我已经调整了我包含的库。在此之前,我在调试模式下使用 CkCrypt 的多线程库。我现在已经包含了单个 realease 库。它位于同一目录中。 当包括 windows.h 时,我得到了事情已经定义的错误。所以我再次删除了该行。有了这个结果:http://i.imgur.com/z415txR.png 这在底部显示 MSVCRT 与其他库发生冲突。它提到使用 NODEFAULTLIB:library 但我不知道该怎么做。在我处理过程中,我会用谷歌搜索并保持最新状态。
【问题讨论】:
-
“windows.h 文件本身还有很多错误” - 请发布错误消息。
-
@Riateche 我已经用显示错误的屏幕截图修改了问题。感谢您对我的问题感兴趣。
-
你能编译Hello World项目吗?你所有的库都是用同一个编译器构建的吗?
-
@Riateche,是的,我可以毫无问题地编译我的项目。在库的自述文件中说:Chilkat 64-bit Class Libraries for Visual C++ 2012 (VC++ 11.0)。在我的 Qt Creator 编译器设置中,配置了以下内容:i.imgur.com/tBB1VwI.png - 所以我猜它是同一个编译器,因为 VC++ Compiler 11.0 匹配。
标签: c++ qt visual-c++ chilkat