يفشل dlopen مع الملف غير موجود عندما يكون الملف في المسار الصحيح

StackOverflow https://stackoverflow.com/questions/3937369

  •  30-09-2019
  •  | 
  •  

سؤال

لدي مكتبة مصممة باستخدام libtool يتم تثبيتها في دليل مكتبة الحزمة ، /usr/local/lib/myprog/libmylib.so. أقوم بتحميل المكتبة ديناميكيًا في الكود الخاص بي باستخدام libltdl. عندما أحاول تحميل هذه المكتبة على جهاز واحد ، فهي تعمل بشكل جيد. من ناحية أخرى ، مع نفس البناء والمكتبة المثبتة على نفس الموقع ، أحصل على خطأ "لم يتم العثور على ملف".

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

تحديث

لقد حاولت التحول إلى استخدام dlopen وتحديد المسار المطلق للمكتبة بشكل صريح. هذا لا يزال يعمل على بعض الأنظمة وليس على الآخر.

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

المحلول

اتضح أن libltdl كان يخفي الخطأ الحقيقي. كان "الملف الذي لم يتم العثور عليه" من مكتبة أخرى تعتمد عليها المكتبة التي كنت أقوم بتحميلها. اكتشفت هذا عند استخدام dlerror() لطباعة رسائل الخطأ. بعد تثبيت المكتبة المفقودة ، كل شيء على ما يرام!

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