Windows 上的 PCSC-Lite 代码
Posted
技术标签:
【中文标题】Windows 上的 PCSC-Lite 代码【英文标题】:PCSC-Lite Codes on Windows 【发布时间】:2009-11-22 03:14:25 【问题描述】:我已经成功构建了一个可以在 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
【问题讨论】:
【参考方案1】:从理论上讲,pcsc-lite 是 Windows PC/SC 堆栈到 UNIX 机器的一个端口。 Windows PC/SC 实现是 pcsc-lite 模仿的“参考实现”。并非所有 Windows SCard 功能都在 pcsc-lite 中实现,甚至存在细微差别,记录在 pcsc-lite documentation
不知道 Qt 的细节,但有一些注意事项:
pcsc_stringify_error
是 pcsc-lite 特定功能。它在 Windows 中不存在
Windows 或 mingw 上没有 pcsclite 库,因此您可能需要不同的 Windows 构建文件。
看看 OpenSC 以及它是如何工作的 makes use of PC/SC(-lite),如果你正在使用 mingw 构建,看看 "build" project。您可能也会对来自 OpenSC 的internal-winscard.h 感兴趣。
除了pcsc_stringify_error
,您的问题在于通用 Windows 链接和 Qt (qmake?) 构建系统。
【讨论】:
我已删除 pcsc_stringify_error 但正如预期的那样,我仍然遇到其他错误。我不确定如何在我的项目中实现 OpenSC,即使它看起来很相似。你能详细说明一下吗?顺便说一句,我尝试在 Visual C++ .Net 中进行编码,当我使用 #include已经有一段时间了,我已经设法使用阅读器附带的示例中的标题解决了这个问题。我的 .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
我不确定这个解决方案是否可以与其他类型的阅读器一起使用,但它确实解决了我的问题。
【讨论】:
【参考方案3】:我遇到了同样的问题,无法将 Windows SDK 中的 winscard 与 minGW 编译器一起使用。 一个快速的解决方法是使用 MSVC++ 编译器(如果您可以访问它。)而不是 minGW(您还需要使用 MSVC++ 编译器构建 Qt 本身)。
也许它也可以与 minGW 一起使用,但我没有进一步研究它..
【讨论】:
更新:刚刚发现不再需要使用 msvc 重新构建 Qt,您可以在此处下载预构建版本:qt.nokia.com/downloads/windows-cpp-vs2008。只需安装并配置 Qt Creator 以使用此 Qt 版本进行构建,就可以了以上是关于Windows 上的 PCSC-Lite 代码的主要内容,如果未能解决你的问题,请参考以下文章
linux 虚拟机安装 pcsc-lite & ccid & libusb 无法检测到CCID KEY设备
PowerShell:在Windows 10中为Wi-Fi网络生成QR代码
Windows Server 2012 Essentials 上的 IIS 在哪里
从Google Cloud Compute上的Windows Server映射Windows上的共享文件夹