Windows上的PCSC Lite代码
我已经成功地构建了一个程序,可以在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): undefined reference to `SCardListReaderGroups' release/ReadCard.o:ReadCard.cpp:(.text+0x3adc): undefined reference to `SCardListReaders' release/ReadCard.o:ReadCard.cpp:(.text+0x3cc6): undefined reference to `SCardListReaders' release/ReadCard.o:ReadCard.cpp:(.text+0x3f88): undefined reference to `SCardGetStatusChange' release/ReadCard.o:ReadCard.cpp:(.text+0x4274): undefined reference to `SCardConnect' release/ReadCard.o:ReadCard.cpp:(.text+0x4d1b): undefined reference to `SCardGetStatusChange release/ReadCard.o:ReadCard.cpp:(.text+0x48e):未定义对“pcsc\u stringify\u error”的引用 release/ReadCard.o:ReadCard.cpp:(.text+0x5e9):未定义对“pcsc\u stringify\u error”的引用 release/ReadCard.o:ReadCard.cpp:(.text+0x7ed):未定义对“pcsc\u stringify\u error”的引用 release/ReadCard.o:ReadCard.cpp:(.text+0x2e56):未定义对“scardListReaderGroup”的引用 release/ReadCard.o:ReadCard.cpp:(.text+0x3adc):未定义对“SCardListReaders”的引用 release/ReadCard.o:ReadCard.cpp:(.text+0x3cc6):未定义对“SCardListReaders”的引用 release/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.LibWindows上的PCSC Lite代码,windows,qt,mingw,smartcard,Windows,Qt,Mingw,Smartcard,我已经成功地构建了一个程序,可以在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
LIBS+=-lwinscard-lpcsclite WinSCard.Lib理论上讲,pcsc-lite是Windows PC/SC堆栈到UNIX机器的端口。Windows PC/SC实现是pcsc lite模仿的“参考实现”。并非所有Windows SCard函数都是在pcsc lite中实现的,甚至还有一些细微的差异,如中所述 不知道Qt的具体情况,但需要注意:
是一个特定于pcsc-lite的函数。它在Windows中不存在pcsc\u stringify\u error
- Windows或mingw上没有pcsclite库,因此您可能需要不同的Windows构建文件
- 看看OpenSC以及它是如何实现的)如果您正在使用mingw进行构建,请看看。您可能也对OpenSC感兴趣
除了pcsc\u stringify\u错误,您的问题是通用Windows链接和Qt(qmake?)生成系统。我遇到了相同的问题,无法将Windows SDK中的winscard与minGW编译器一起使用。 一个快速修复方法是使用MSVC++编译器(如果您有权访问它的话…)而不是minGW(您还需要使用MSVC++编译器构建Qt本身)
也许它也可以与minGW一起工作,但我没有进一步研究它。已经有一段时间了,我已经设法使用我的阅读器附带的示例中的标题来解决这个问题。我的.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
}
我不确定此解决方案是否可用于其他类型的读卡器,但它确实解决了我的问题。我已删除了pcsc\u stringify\u错误,但正如预期的那样,我仍有其他错误。我不确定如何在我的项目中实现OpenSC,尽管它看起来很相似。你能详细说明一下吗?顺便说一下,我在VisualC++中尝试过编码,当我使用了“包含”时,我没有错误,我可以使用SCADDESTALLIVE上下文,没有任何问题,但是在QT中使用该代码时,我会有错误。这已经是QT问题,而不是PC/S.。了解您的工具。更新:刚刚发现不再需要使用msvc重建Qt,您可以在此处下载预编译版本:。只需安装并配置QtCreator,以便在构建中使用此Qt版本,就可以了