سؤال

أرغب في تضمين libqtgui.so.4 libqtnetwork.so.4 و libqtcore.so.4 في نفس الدليل كما يتواجد تطبيقي. كيف سأجعل QT فهم هذا؟ الغرض y هو أن يكون لديك تطبيق مستقل يستخدم المكتبات المشتركة

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

المحلول

تعيين متغير بيئة LD_LIBRARY_PATH هو خيار واحد. فمثلا:

export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH

خيار آخر هو تعيين RPTH لتطبيق QT الخاص بك أثناء الارتباط. سيؤدي تعيين RPTH إلى القيمة "$ Origin" إلى أن يبحث الرابط الديناميكي في نفس الدليل مثل تطبيق QT الخاص بك في وقت التشغيل. على سبيل المثال ، في حالة استخدام QMake ، أضف المقتطف التالي إلى ملف المشروع الخاص بك:

unix:!mac{
  QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
  QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
  QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs
  QMAKE_RPATH=
}

سيقوم هذا بتعيين RPATH على "$ Origin: $ Origin/lib: $ Origin/libs" ، مما يعني أن الرابط الديناميكي سيبحث أولاً في موقع تطبيق QT الخاص بك ، ثم في دليل lib الفرعي في موقعه ، ثم في libs الدليل الفرعي في موقعه ، وأخيراً في أي مواقع محددة في نظام.

نصائح أخرى

سوف يبحث UNIX / Linux في LD_LIBRARY_PATH (إذا تم تعيينه) أولاً قبل البحث في LIBS القياسية للنظام. لذلك إذا قمت بتعيين ذلك ، فيمكنك بالفعل تجاوز. تماما مثل ضبط المسار على Windows. نفس التأثير. أمر أمر.

يمكنك إضافة ./ أو. إلى ld_library_path كذلك.

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

LD_LIBRARY_PATH و QMAKE_RPATH لم تعمل من أجلي. بدلا من ذلك ، قمت بتعيين QMAKE_RPATHDIR في .pro ملف. على سبيل المثال بعد أن تم بناؤها وتثبيتها (make install) QT ، لقد تم وضعه في /usr/local/Trolltech/Qt-4.8.5/lib/. ثم أكتب ما يلي في بلدي .pro ملف:

QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/

ملاحظة 1: يبدو أن المسارات النسبية لا تعمل. تفضل المسارات المطلقة.

الملاحظة 2: عندما أنت بعد ذلك make, ، يمكنك أن ترى أن الخيار التالي يتم إعطاؤه للرابط: -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/

ملاحظة 3: للتأكد من أن الروابط الثنائية ديناميكيًا للمكتبة الصحيحة ، يمكنك عرض إصدار QT في وقت التشغيل الذي يتم تسليمه بواسطة qVersion().

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