2009-11-22 122 views
2

我已经成功构建了一个可以在Linux上使用Qt读取Mifare 1K卡的程序。所以现在,我希望它能在Windows上运行。从我收集的信息来看,Windows上没有PCSC-Lite端口,我需要使用Windows SDK中的winscard。我已经下载了它,并且从Windows中的Qt中获取了很多未定义的参考错误(与MingW一起)。例如:Windows上的PCSC-Lite代码

 
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 

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

LIBS += -lwinscard -lpcsclite WinSCard.Lib

回答

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 
} 
 

我不知道这是否解决方案可与其他类型的读者可以使用,但它肯定解决我的。

1

从理论上讲,pcsc-lite是UNIX计算机的Windows PC/SC堆栈的端口。 Windows PC/SC实现是pcsc-lite模拟的“参考实现”。并非所有Windows SCARD功能在PCSC-精简版实现的,甚至有微小差别,在pcsc-lite documentation

记录不知道关于Qt的细节,但一些注意事项:

  • pcsc_stringify_error是PCSC,精简版具体功能。它不存在于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)构建系统。

+0

我已经删除了pcsc_stringify_error,但如预期的那样,我仍然有其他错误。我不知道如何在我的项目中实现OpenSC,即使它看起来很相似。你能详细说明一下吗? BTW,我尝试在Visual C++ .NET编码,当我使用的#include 我可以使用SCardEstablishContext没有任何问题,我没有错误,但是当我使用Qt中的代码我得到了错误。 – amree 2009-12-02 05:09:47

+0

这已经是一个关于Qt而不是PC/SC的问题。无法帮助你,知道你的工具。 – 2009-12-03 08:10:35

0

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

可能是它的也有可能得到这个使用MinGW工作,但我并没有考虑任何进一步..

+0

更新:刚发现不再需要使用msvc重建Qt,您可以在此处下载预构建版本:http://qt.nokia.com/downloads/windows-cpp-vs2008。 只需安装并配置Qt Creator以使用此版本的Qt版本,您应该没问题 – 2010-01-02 15:57:59