2009-11-22 129 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