2009-11-22 3 views
2

Я успешно построил программу, которая может читать Mifare 1K Card, используя Qt в Linux. Итак, теперь я бы хотел, чтобы он работал в Windows. Из того, что я собрал, в Windows нет порта PCSC-Lite, и мне нужно использовать winscard из Windows SDK. Я загрузил его, и у меня появилось множество неопределенных ссылочных ошибок из моего Qt в Windows (с MingW). Например:PCSC-Lite коды на Windows

 
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 представляет собой порт стека Windows PC/SC для компьютеров UNIX. Реализация 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. internal-winscard.h от OpenSC может вас заинтересовать.

За исключением pcsc_stringify_error, возникают проблемы с общей связью Windows и системой сборки Qt (qmake?).

+0

Я удалил pcsc_stringify_error, но, как и ожидалось, у меня остались другие ошибки. Я не уверен, как я могу реализовать OpenSC в своем проекте, даже если он выглядит похожим. Не могли бы вы подробнее рассказать об этом? BTW, я пробовал кодирование в Visual C++ .Net, и у меня не было ошибок при использовании #include , и я могу без проблем использовать SCardEstablishContext, но я получил ошибки, когда использовал этот код в Qt. – amree

+0

Это уже вопрос о Qt, а не ПК/SC. Не могу помочь вам в этом, узнайте свои инструменты. Обновление –

0

Я столкнулся с той же проблемой, не имея возможности использовать winscard из SDK Windows вместе с компилятором minGW. Быстрое решение заключается в использовании компилятора MSVC++ (если у вас есть доступ к нему offcourse ..) вместо minGW (вам также нужно будет создать Qt с помощью компилятора MSVC++).

Вероятно, его также можно получить эту работу с MinGW, но я не смотрел на него какой-либо дальше ..

+0

: только что выяснили, что перестройка Qt с msvc больше не нужна, вы можете скачать версию предварительной сборки здесь: http://qt.nokia.com/downloads/windows-cpp-vs2008. Просто установите и настройте Qt Creator для использования этой версии Qt для вашей сборки, и вы должны быть в порядке – 2010-01-02 15:57:59