سؤال

كيف يمكنني إضافة مكتبة خارجية إلى مشروع تم بناؤه بواسطة QT Creator RC1 (الإصدار 0.9.2)؟ على سبيل المثال، وظيفة Win32 EnumProcesses() يستوجب Psapi.lib لإضافتها في المشروع للبناء.

هل كانت مفيدة؟

المحلول

الطريقة المناسبة للقيام بذلك هي مثل هذا:

LIBS += -L/path/to -lpsapi

وبهذه الطريقة ستعمل على جميع المنصات التي تدعمها كيو تي. هذه الفكرة هي أنه يجب عليك فصل الدليل من اسم المكتبة (دون التمديد ودون أي بادئة "LIB"). بالطبع، إذا كنت تضم ليب ويندوز محددة، فلا يهم هذا حقا.

في حال كنت ترغب في تخزين ملفات Lib الخاص بك في دليل المشروع، يمكنك الرجوع إليها مع $$_PRO_FILE_PWD_ متغير، على سبيل المثال:

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi

نصائح أخرى

هل تستخدم qmake مشاريع؟ إذا كان الأمر كذلك، يمكنك إضافة مكتبة خارجية باستخدام LIBS عامل. على سبيل المثال:

win32:LIBS += path/to/Psapi.lib

Libs + = c: program files opencv lib

لن تعمل لأنك تستخدم مسافات بيضاء في ملفات البرنامج. في هذه الحالة، عليك إضافة عروض الأسعار، وبالتالي فإن النتيجة ستبدو مثل هذا: Libs + = "C: Program Files OpenCV Lib"وبعد أوصي بوضع المكتبات في مواقع الفضاء غير البيضاء ؛-)

الخطأ الذي تعنيه هو بسبب مفقود مسار الإضافي. حاول إضافة ذلك مع: IncludePath + = C: PATH إلى files Files آمل أن يعمل. يعتبر.

وإضافة ملفات مكتبة متعددة يمكنك الكتابة على النحو التالي:

IncludePath * = E: / debuglibrary / vtk e: / debuglibrary / vtk / common e: / debuglibrary / vtk / filtering e: / devuglibrary / vtk / genericfiltering e: / debuglibrary / vtk / graphics e: / debuglibrary / vtk / guisupport / كيو تي E: / DebugLibrary / VTK / Hybrid E: / DebugLibrary / VTK / Imaging E: / DebugLibrary / VTK / IO E: / DebugLibrary / VTK / Parallel E: / Debuglibrary / VTK / تقديم E: / Debuglibrary / VTK / المرافق E : / debuglibrary / vtk / volumerendering e: / debuglibrary / vtk / widgets e: / debuglibrary / vtk / التفاف

LIBS * = -LE: / DebugLibrary / VTKBin / بن / اطلاق سراح -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkhybrid -lvtkvolumerendering -lqvtkwidgetplugin -lvtkgenericfiltering

إذا كنت ترغب في نشر تطبيقك على آلات العملاء، بدلا من استخدام طلبك فقط، نجد أن LIBS+= -Lxxx -lyyy الطريقة يمكن أن تؤدي إلى الارتباك إذا لم تكن مشاكل.

نقوم بتطوير تطبيقات Linux و Mac و Windows باستخدام QT. نحن سفينة كاملة، تطبيقات قائمة بذاتها. لذلك يجب تضمين جميع المكتبات غير النظامية في حزمة النشر. نريد أن يكون عملائنا قادرين على تشغيل التطبيق من نفس عصا USB لجميع OSS. لأسباب توافق النظام الأساسي، يجب تنسيق عصا USB ك Fat32، والتي لا تدعم Symlinks (Linux).

وجدنا ذلك LIBS+= -Lxxx -lyyy المصطلح الكثير من المربع الأسود:

  1. نحن لا نعرف بالضبط ما هو FilePath من المكتبة (ثابتة أو ديناميكية) التي تم العثور عليها بواسطة الرابط. هذا غير مريح. وجدت رابط Mac لدينا بانتظام Libs مختلفة عن تلك التي اعتقدنا أنه يجب استخدامها. حدث ذلك عدة مرات مع مكتبات Openssl حيث وجد رابط Mac واستخدامه الخاص - كبار السن، غير متوافق - OpensssSSSSL بدلا من الإصدار المطلوب.

  2. لا يمكننا تحمل تكاليف الرابط يستخدم Symlinks إلى المكتبات لأن هذا من شأنه كسر حزمة النشر.

  3. نريد أن نرى من اسم من المكتبة ما إذا كنا نربط مكتبة ثابتة أو ديناميكية.

لذلك بالنسبة لحالتنا الخاصة، نستخدم فقط FilePaths المطلق والتحقق مما إذا كانت موجودة. نحن نزيل جميع الهبات.

أولا نكتشف نظام التشغيل الذي نستخدمه ونضع هذا في متغير التكوين. وعلى سبيل المثال لنظام التشغيل Linux 64bit، ثم:

linux64 {
    LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a
    !exists($$LIBSSL): error ("Not existing $$LIBSSL")
    LIBS+= $$LIBSSL
    LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a
    !exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO")
    LIBS+= $$LIBCRYPTO
}

يمكن نسخ جميع التبعيات إلى حزمة النشر كما نعرفها.

أود أن أضيف من أجل الاكتمال الذي يمكنك أيضا إضافة مسار المكتبة فقط حيث ستبحث عن مكتبة معتمدة (قد لا يتم الرجوع إليها مباشرة في التعليمات البرمجية الخاصة بك ولكن قد تحتاج إلى مكتبة تستخدمها).

للمقارنة، هذا من شأنه أن يتوافق مع بيئة Libpath ولكن نوعها الغامض في كيو تي كوبية وغير موثقة بشكل جيد.

الطريقة التي جئت فيها حول هذا ما يلي:

LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"

بشكل أساسي إذا لم تقدم اسم المكتبة الفعلية، فإنه يضيف المسار إلى حيث ستقوم بمكتبات البحث عنها. الفرق في بناء الجملة صغير ولكن هذا مفيد للغاية لتزويد المسار الذي يجب عليه البحث عن مكتبات تعتمد. في وقت ما هو مجرد ألم لتزويد كل مكتبة فردية في المسار حيث تعرف أنها كلها في مجلد معين وسيقوم كاتشور كيو تي باختيارها.

في .pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib

في .h / .cpp: #pragma comment(lib,"user32.lib")

#pragma comment(lib,"psapi.lib")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top