it-swarm.asia

خطأ: ld.so: لا يمكن تحميل كائن LD_PRELOAD مسبقًا: تم تجاهله

أنا أستخدم أوبونتو 12.04. في كل مرة أبدأ فيها تشغيل محطة bash وفي كل مرة أقوم فيها بكتابة أمر (واضغط مفتاح الإدخال) ، أتلقى هذه الرسالة:

خطأ: ld.so: كائن '/usr/lib/liblunar-calendar-preload.so' من LD_PRELOAD لا يمكن تحميله مسبقًا: تم تجاهله.

إنه غريب. فما هو متغير البيئة LD_PRELOAD المستخدمة ل؟ وما الذي يجري وراء الكواليس؟

شكر.

31
lulyon

يأخذ رابط بعض المتغيرات البيئية في حساب. واحد هو LD_PRELOAD

من man 8 ld-linux:

LD_PRELOAD
          A whitespace-separated list of additional,  user-specified,  ELF
          shared  libraries  to  be loaded before all others.  This can be
          used  to  selectively  override  functions   in   other   shared
          libraries.   For  setuid/setgid  ELF binaries, only libraries in
          the standard search directories that are  also  setgid  will  be
          loaded.

لذلك سيحاول الرابط تحميل المكتبات المدرجة في المتغير LD_PRELOAD قبل تحميل الآخرين.

ماذا يمكن أن يكون ذلك داخل المتغير يتم سرد مكتبة لا يمكن تحميلها مسبقًا. ابحث داخل بيئة .bashrc أو .bash_profile حيث تم تعيين LD_PRELOAD وإزالة تلك المكتبة من المتغير.

10
hetepeperfan

إذا كنت تريد التأكد من تحميل المكتبة إذا وفقط البرنامج lunar-calendar-gtk يتم إطلاقه ، يمكنك تطبيق هذا:

يمكنك تعيين متغير البيئة لكل أمر عن طريق بادئة الأمر به:

$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$

يمكنك بعد ذلك اختيار وضع هذا في برنامج شل وإنشاء lunar-calendar-gtk ارتباط إلى هذا البرنامج النصي Shell ، استبدال المرجع الأصلي. يعمل هذا بشكل فعال على التأكد من تحميل المكتبة في كل مرة يتم فيها تنفيذ التطبيق الأصلي.

سيكون عليك إعادة تسمية الأصل lunar-calendar-gtk إلى شيء آخر ، والذي قد لا يكون مثيرا للاهتمام للغاية لأنه قد يسبب مشاكل مع إلغاء التثبيت والترقية. ومع ذلك ، فقد وجدت أنه مفيد مع إصدار سابق من Skype.

8
Einar

شكرا على الردود. أعتقد أنني حللت المشكلة الآن.

نظرًا لأن LD_PRELOAD مخصصة لإعداد بعض المكتبات المحملة ، أتحقق من المكتبة التي تم تحميلها مسبقًا بـ LD_PRELOAD ، أحدها "liblunar-calendar-preload.so" ، وهو غير موجود في المسار "/ usr/lib/liblunar-calendar- preload.so "، لكنني أجد مكتبة مشابهة" liblunar-calendar-preload-2.0.so "، وهي نسخة مختلفة عن النسخة السابقة.

ثم أعتقد أنه ربما تم تحديث liblunar-calendar-preload.so إلى إصدار 2.0 عند تحديث النظام ، مع ترك LD_PRELOAD يظل "/usr/lib/liblunar-calendar-preload.so". وبالتالي لم يتم تحديث اسم مكتبة التحميل المسبق إلى الإصدار الأحدث.

لتجنب تغيير متغير البيئة ، أقوم بإنشاء ارتباط رمزي ضمن المسار "/ usr/lib"

Sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so

ثم أعد تشغيل باش ، ذهب الخطأ.

3
lulyon

هذا يعني أن المسار الذي أدخلته تسبب في حدوث خطأ. في الأمر LD_PRELOAD ، قم بتعديل المسار مثل نصائح الخطأ:

/usr/lib/liblunar-calendar-preload.so
1
purplesky