Pregunta

He construido con éxito un programa que pueda leer la tarjeta Mifare 1K usando Qt en Linux. Así que ahora, me gustaría que se ejecute en Windows. De lo que he reunido, no hay puerto de PCSC-Lite en Windows y tengo que usar winscard desde Windows SDK. He descargado y me dieron un montón de errores de referencia de mi Qt en Windows (con MingW). Por ejemplo:

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

También he probado la especificación de estas bibliotecas en el proyecto, pero aún así falló.

LIBS += -lwinscard -lpcsclite WinSCard.Lib
¿Fue útil?

Solución 2

Ha sido un tiempo y he conseguido resolver esto utilizando las cabeceras del ejemplo que viene con mi lector. Mi archivo .pro se parece a esto


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
}

No estoy seguro de si esta solución se puede utilizar con otro tipo de lectores, pero seguro que resolvió la mía.

Otros consejos

En teoría, PCSC-Lite es un puerto de la pila / SC PC con Windows a máquinas UNIX. aplicación de Windows PC / SC es la "implementación de referencia" que imita PCSC-lite. No todas las funciones de Windows SCard se implementan en PCSC-lite y hay diferencias, incluso menores, documentados en documentación PCSC-lite

No sé acerca de las características específicas de Qt, pero algunas notas:

  • pcsc_stringify_error es una función específica pcsc-lite. No existe en Windows
  • no hay ninguna biblioteca pcsclite en Windows o MinGW, por lo que es probable que tenga diferentes archivos de generación para Windows.
  • echar un vistazo a OpenSC y cómo hace uso de PC / SC (-Lite ) y si usted está construyendo con MinGW, echar un vistazo a la "acumulación" proyecto. interna-winscard.h de OpenSC podría ser de interés para usted también.

A excepción de la pcsc_stringify_error, sus problemas son con el genérico de Windows que une y Qt (QMake?) Del sistema a construir.

Me encontré con el mismo problema, al no poder utilizar winscard desde el SDK de Windows junto con el compilador MinGW. Una solución rápida es utilizar el compilador MSVC ++ (si tiene acceso a ella offcourse ..) en lugar de MinGW (necesitará para construir Qt sí mismo usando el compilador MSVC ++ también).

Probablemente también es posible conseguir este trabajo con Mingw pero no ver en él más lejos ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top