مشكلة تثبيت QCA-OSSL (جزء من بنية تشفير QT) المكوّن الإضافي على Windows 7
سؤال
لقد كنت أحاول استخدام QCA (نهاية لهذه الغاية) على جهاز كمبيوتر يعمل بنظام Windows لبضعة أيام الآن ، يعمل بشكل جيد على مربع Linux الخاص بي ، فقط لا يمكنك تشغيله مع Windows.
لذلك تابعت جميع الإرشادات الخاصة بتثبيت QCA ثم المكون الإضافي OSSL لـ QCA. يعمل QCA بشكل جيد ولكن لسبب ما لا يظهر المكون الإضافي في منشئ QT الخاص بي ولا يمكنني استخدام بعض الوظائف في البرنامج المساعد.
لقد استخدمت qcatool2.exe التي تأتي مع QCA للتحقق من المكونات الإضافية الخاصة بي باستخدام
qcatool2 plugins --debug
واحصل على رسالة الخطأ هذه:
plugin: qca-ossl2.dll: failed to load: The plugin 'C:/Qt/2010.05/qt/plugins/crypto/qca-ossl2.dll' uses incompatible Qt library. Expected build key "Windows mingw debug full-config", got "Windows mingw release full-config"
الآن يبدو لي هذا كما لو أن QT يتطلب تجميع المكون الإضافي في وضع التصحيح (فيما يتعلق بمفتاح الإنشاء لاحتواء تصحيح بدلاً من الإصدار) لذلك أضفت
CONFIG += debug
إلى ملف مشروع Plugin الخاص بي وركض Qmake و Mingw32-Make كالمعتاد ، لكن يبدو أن هذا لم يكن له أي تأثير.
ملف مشروعي للمكون الإضافي الآن:
TEMPLATE = lib
CONFIG += plugin
QT -= gui
DESTDIR = lib
VERSION = 2.0.0
unix:include(conf.pri)
windows:CONFIG += crypto
windows:include(conf_win.pri)
CONFIG += create_prl
SOURCES = qca-ossl.cpp
windows:{
load(winlocal.prf)
isEmpty(WINLOCAL_PREFIX) {
error("WINLOCAL_PREFIX not found. See http://delta.affinix.com/platform/#winlocal")
}
OPENSSL_PREFIX = $$WINLOCAL_PREFIX
DEFINES += OSSL_097
INCLUDEPATH += $$OPENSSL_PREFIX/include
LIBS += -L$$OPENSSL_PREFIX/lib
LIBS += -llibeay32 -lssleay32
LIBS += -lgdi32 -lwsock32
}
!debug_and_release|build_pass {
CONFIG(debug, debug|release) {
mac:TARGET = $$member(TARGET, 0)_debug
windows:TARGET = $$member(TARGET, 0)d
}
}
CONFIG += debug
وقد أي شخص حصل على أي أفكار؟ إذا كنت بحاجة إلى المزيد من التفاصيل ، فقط اسأل ، فقد حاولت أن أكون شاملًا قدر الإمكان. شكرًا
توم
المحلول
لقد كنت أعاني من موقف مماثل: QCA-OSSL يبني بشكل جيد على Linux وليس على الإطلاق على Windows. أنا فقط ضربت اختراقًا قد يساعدك أيضًا.
الإصدارات والبقع
- QTSDK-2010.05
- QCA-2.0.3
- QCA-OSSL-R1190163 (من المستودع)
- Openssl-1.0.0b
بادئ ذي بدء ، إذا كنت تستخدم إصدارًا جديدًا (0.9.7+ ، على ما أظن) من OpenSSL ، فقد تحتاج إلى استخدام إصدار QCA-OSSL من المستودع لأنه يضع بعض عدم التوافق. كنت بحاجة أيضًا إلى التعليق على بعض الخطوط في ملف QCA-OSSL.CPP الجديد الذي يتعامل مع SHA224 و SHA256 و SHA384 و SHA512 لتجنب الأخطاء. أنا أستخدم QCA-OSSL للأصفار ، لذلك لست قلقًا بشأن التجزئة ولم أكن أتحقق من الأخطاء كثيرًا.
تحديد ذلك
كانت مشكلات بناء Windows كثيرة بالنسبة لي ، ولكن معظمها ينبع من إعداد البناء الرديء لإصدار Windows من البرنامج المساعد. من الجيد أن يكون لديك القليل من البرنامج النصي لجانب Linux من الأشياء ، ولكن ماذا عن Windows؟ نحن بحاجة إلى القيام ببعض العمل الإضافي.
بعض هذا العمل الإضافي هو أنني اخترت مواقع غير قياسية لمكتبات الدعم الخاصة بتطبيقي. QCA و OpenSSL موجودان داخل هيكل دليل المشروع في مكتبات/ دليل. أظن أنك فعلت شيئًا مشابهًا إذا كنت تحاول تجميع تطبيقك ، ولكن حتى لو لم تفعل ما يلي يجب أن يساعد.
العثور على openssl
لن تبني QCA-OSSL جيدًا إذا لم تتمكن من العثور على المكتبة التي من المفترض أن تتصل بها ... :) لذلك دعونا نحدد مباشرة مكان وجودها. التعليق على السطور المتعلقة بـ winlocal.prf والتغييرات التي تنبع منها في QCA-OSSL.Pro. سنحدد مباشرة مكان العثور على OpenSSL.
TEMPLATE = lib
CONFIG += plugin
QT -= gui
DESTDIR = lib
VERSION = 2.0.0
unix:include(conf.pri)
windows:CONFIG += crypto
windows:include(conf_win.pri)
CONFIG += create_prl
SOURCES = qca-ossl.cpp
windows:{
# Rather than rely on the winlocal.prf file, we will specify the location of the openssl
# by hand when running qmake.
#
# load(winlocal.prf)
# isEmpty(WINLOCAL_PREFIX) {
# error("WINLOCAL_PREFIX not found. See http://delta.affinix.com/platform/#winlocal")
# }
#
# OPENSSL_PREFIX = $$WINLOCAL_PREFIX
DEFINES += OSSL_097
INCLUDEPATH += $$OPENSSL_PREFIX/include
LIBS += -L$$OPENSSL_PREFIX/lib
LIBS += -llibeay32 -lssleay32
LIBS += -lgdi32 -lwsock32
}
!debug_and_release|build_pass {
CONFIG(debug, debug|release) {
mac:TARGET = $$member(TARGET, 0)_debug
windows:TARGET = $$member(TARGET, 0)d
}
}
الآن لدينا وصول مباشر إلى $$ OpenSSL_PREFIX VECEANTION في ملف .PRO. يمكننا ضبطه عندما ندعو Qmake عن طريق القيام بما يلي.
qmake.exe "OPENSSL_PREFIX=C:/path/to/openssl-1.0.0b"
يجب أن تكون قادرًا على استخدام القطع المائلة للخلف أو القطع المدمجة. اخترت هنا إلى الأمام لأن QT قد أهملها منذ 4.7.
بدلاً من ذلك ، يمكنك تعيين متغير OpenSSL_Prefix مباشرة في ملف .Pro.
العثور على QCA
بعد مقارنة Makefiles UNIX و Windows لـ QCA-OSSL ، بشكل غريب بما فيه الكفاية ، فإنه لا يشمل أبدًا مكتبات QCA للبناء أو الارتباط! ؟! أدى ذلك إلى خطأ "واجهة غير محددة" على سطر Q_Interfaces (QCAPLUGIN) لتعريف فئة OpenSSLPlugin في نهاية QCA-OSSL.CPP.
لتجنب ذلك ، سنحتاج إلى تحديد مسارات التضمين والمكتبة بشكل صريح. التوسع على خط Qmake من القسم الأخير ، يكون خط QMake النهائي كما يلي.
qmake.exe "OPENSSL_PREFIX=C:/path/to/openssl-1.0.0b" "INCLUDEPATH+=C:/path/to/qca-2.0.3/include/QtCrypto" "LIBS+=-LC:/path/to/qca-2.0.3/lib -lqca2"
"تثبيت" QCA-OSSL
بعد تشغيل خط QMake فوق تشغيل OL '، ستحتاج إلى تثبيت QCA-OSSL. يمكنك نسخ DLL الناتج من Lib/ Directory إلى دليل المكونات الإضافية لـ QT ، والذي إذا كنت تستخدم الإصدارات الخاصة بي الافتراضية إلى C: qt 2010.05 qt plugins crypto. بدلاً من ذلك ، يمكنك نقله إلى دليل التشفير الموجود على مستوى جذر بنية دليل مشروعك مثل C: path to my project crypto.
آمل أن يساعد هذا!
نصائح أخرى
في الواقع ، يمكنك تجربة هذا البرنامج التعليمي QCA+OpenSSL على النافذة. إنه يعمل بشكل جيد.
بالمناسبة ، يمكنني الاستفادة من QCA مع AES 256 على النافذة. لكن لا يمكنني استخدامه على سيمبيان. أي فكرة للقيام بذلك؟