كيف يمكنني تعيين حيث يجد تطبيق QT وحدة QT؟
-
21-09-2019 - |
سؤال
أرغب في تضمين 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()
.