سؤال

لقد قمت بنجاح ببناء برنامج يمكنه قراءة بطاقة Mifare 1K باستخدام QT على Linux. حتى الآن ، أود أن يعمل على Windows. من ما جمعته ، لا يوجد منفذ PCSC-Lite على Windows وأحتاج إلى استخدام Winscard من Windows SDK. لقد قمت بتنزيله وحصلت على الكثير من الأخطاء المرجعية غير المحددة من QT في Windows (مع 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

لقد حاولت أيضًا تحديد هذه المكتبات في المشروع ، لكنني ما زلت فشلت.

LIBS += -lwinscard -lpcsclite WinSCard.Lib
هل كانت مفيدة؟

المحلول 2

لقد مرت بعض الوقت وتمكنت من حل هذا باستخدام الرؤوس من المثال الذي يأتي مع القارئ. ملف .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-Lite هو منفذ من مكدس Windows PC/SC لآلات UNIX. تطبيق Windows PC/SC هو "التنفيذ المرجعي" الذي يحاكي PCSC-Lite. لا يتم تنفيذ جميع وظائف Windows Scard في PCSC-Lite وهناك اختلافات طفيفة ، موثقة في وثائق PCSC-Lite

لا أعرف عن تفاصيل QT ، ولكن بعض الملاحظات:

  • pcsc_stringify_error هي وظيفة محددة PCSC-Lite. إنه غير موجود في Windows
  • لا توجد مكتبة PCSclite على Windows أو Mingw ، لذلك ربما تحتاج إلى ملفات بناء مختلفة لنظام التشغيل Windows.
  • ألقِ نظرة على Opensc وكيف يستفيد من جهاز الكمبيوتر/SC (-Lite) وإذا كنت تبني مع Mingw ، فقم بإلقاء نظرة على مشروع "بناء". الداخلية winscard.h من Opensc قد تكون ذات أهمية بالنسبة لك أيضًا.

ما عدا pcsc_stringify_error, ، مشاكلك مع نظام Windows Generic و QT (QMake؟) البناء.

واجهت نفس المشكلة ، ولم أتمكن من استخدام Winscard من Windows SDK مع برنامج التحويل البرمجي للبلدان. يتمثل الإصلاح السريع في استخدام برنامج التحويل البرمجي MSVC ++ (إذا كان لديك إمكانية الوصول إليه في الخارج ..) بدلاً من MINGW (ستحتاج إلى إنشاء QT نفسه باستخدام برنامج التحويل البرمجي MSVC ++ أيضًا).

ربما من الممكن أيضًا الحصول على هذا العمل مع Mingw لكنني لم أنظر إليه أكثر من ذلك ..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top