Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上的PCSC Lite代码_Windows_Qt_Mingw_Smartcard - Fatal编程技术网

Windows上的PCSC Lite代码

Windows上的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

我已经成功地构建了一个程序,可以在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.Lib
LIBS+=-lwinscard-lpcsclite WinSCard.Lib理论上讲,pcsc-lite是Windows PC/SC堆栈到UNIX机器的端口。Windows PC/SC实现是pcsc lite模仿的“参考实现”。并非所有Windows SCard函数都是在pcsc lite中实现的,甚至还有一些细微的差异,如中所述

不知道Qt的具体情况,但需要注意:

  • pcsc\u stringify\u error
    是一个特定于pcsc-lite的函数。它在Windows中不存在
  • 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版本,就可以了