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

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

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

LIBS + = -lwinscard -lpcsclite WinSCard.Lib

最佳答案

从理论上讲,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?)构建系统。

    关于windows - Windows上的PCSC-Lite代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1777713/

    10-13 06:04