يفشل dlopen مع الملف غير موجود عندما يكون الملف في المسار الصحيح
سؤال
لدي مكتبة مصممة باستخدام libtool يتم تثبيتها في دليل مكتبة الحزمة ، /usr/local/lib/myprog/libmylib.so
. أقوم بتحميل المكتبة ديناميكيًا في الكود الخاص بي باستخدام libltdl. عندما أحاول تحميل هذه المكتبة على جهاز واحد ، فهي تعمل بشكل جيد. من ناحية أخرى ، مع نفس البناء والمكتبة المثبتة على نفس الموقع ، أحصل على خطأ "لم يتم العثور على ملف".
إذا اتصلت lt_dlforeachfile
مباشرة من قبل lt_dlopenext
(الذي أستخدمه لتحميل المكتبة) ، ثم أستطيع أن أرى من خلال طباعة أسماء الملفات التي تم العثور عليها في المكتبة التي أحتاجها في مسار البحث. ولكن بعد ذلك مباشرة ، فشل تحميله مع خطأ "لم يتم العثور على ملف". أي اقتراحات؟
تحديث
لقد حاولت التحول إلى استخدام dlopen
وتحديد المسار المطلق للمكتبة بشكل صريح. هذا لا يزال يعمل على بعض الأنظمة وليس على الآخر.
المحلول
اتضح أن libltdl كان يخفي الخطأ الحقيقي. كان "الملف الذي لم يتم العثور عليه" من مكتبة أخرى تعتمد عليها المكتبة التي كنت أقوم بتحميلها. اكتشفت هذا عند استخدام dlerror()
لطباعة رسائل الخطأ. بعد تثبيت المكتبة المفقودة ، كل شيء على ما يرام!