2

我已经成功构建了一个可以在 Linux 上使用 Qt 读取 Mifare 1K 卡的程序。所以现在,我希望它在 Windows 上运行。据我所知,Windows 上没有 PCSC-Lite 端口,我需要使用 Windows SDK 中的 winscard。我已经下载了它,我在 Windows 中的 Qt(使用 MingW)中有很多未定义的参考错误。例如:

release/ReadCard.o:ReadCard.cpp:(.text+0x48e): undefined reference to `pcsc_stringify_error'
release/ReadCard.o:ReadCard.cpp:(.text+0x5e9): undefined reference to `pcsc_stringify_error'
release/ReadCard.o:ReadCard.cpp:(.text+0x7ed): undefined reference to `pcsc_stringify_error'
release/ReadCard.o:ReadCard.cpp:(.text+0x2e56): 未定义对“SCardListReaderGroups”的引用
release/ReadCard.o:ReadCard.cpp:(.text+0x3adc): 对“SCardListReaders”的未定义引用
release/ReadCard.o:ReadCard.cpp:(.text+0x3cc6): 未定义的对“SCardListReaders”的引用
发布/ReadCard.o:ReadCard.cpp:(.text+0x3f88): 未定义对“SCardGetStatusChange”的引用
release/ReadCard.o:ReadCard.cpp:(.text+0x4274): 未定义对“SCardConnect”的引用
release/ReadCard.o:ReadCard.cpp:(.text+0x4d1b): 未定义引用`SCardGetStatusChange

我也尝试在项目中指定这些库,但仍然失败。

LIBS += -lwinscard -lpcsclite WinSCard.Lib
4

3 回答 3

1

从理论上讲,pcsc-lite 是 Windows PC/SC 堆栈到 UNIX 机器的一个端口。Windows PC/SC 实现是 pcsc-lite 模仿的“参考实现”。并非所有 Windows SCard 功能都在 pcsc-lite 中实现,甚至存在细微差别,记录在pcsc-lite 文档中

不知道 Qt 的细节,但有一些注意事项:

除了pcsc_stringify_error,您的问题在于通用 Windows 链接和 Qt (qmake?) 构建系统。

于 2009-11-22T16:21:59.233 回答
1

已经有一段时间了,我已经设法使用阅读器附带的示例中的标题解决了这个问题。我的 .pro 文件看起来像这样


win32 { 
    HEADERS += MainWindow.h \
        ReadCard.h \
        Config.h
    INCLUDEPATH += C:/Omnikey/Include
    LIBS += C:/Omnikey/Lib/winscardn.lib
}
unix { 
    HEADERS += MainWindow.h \
        wintypes.h \
        winscard.h \
        reader.h \
        pcsclite.h \
        ReadCard.h \
        Config.h
    LIBS += -lpcsclite
}

我不确定这个解决方案是否可以与其他类型的阅读器一起使用,但它确实解决了我的问题。

于 2010-01-16T04:39:38.593 回答
0

我遇到了同样的问题,无法将 Windows SDK 中的 winscard 与 minGW 编译器一起使用。一个快速的解决方法是使用 MSVC++ 编译器(如果您可以访问它。)而不是 minGW(您还需要使用 MSVC++ 编译器构建 Qt 本身)。

可能它也可以与 minGW 一起使用,但我没有进一步研究它。

于 2010-01-02T15:23:15.593 回答