سؤال

ولدي بعض ج + + رمز أنا باستخدام لاختبار فيه السطر الأول هو الدعوة إلى dlopen في محاولة لتحميل الكائن المشترك بلدي. على ضرب هذا الخط أحصل على الخطأ التالي:

Terminate called after throwing an instance of std::bad_alloc: 
   what() : St9bad_alloc

ولقد زاد من الذاكرة (-m مجانا تقارير الآن أن لدي ~ 120 MB مجانا عند تحميل بلدي إكس في جدب) وأنا لا يزال الحصول على نفس الرسالة.

وأي شخص أي أفكار على ماذا يمكن أن تسبب هذا وما يمكنني القيام به لحلها؟

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

المحلول

ونلقي نظرة على C ++ dlopen مصغرة HOWTO ، أمل أن يساعد.

نصائح أخرى

وتخميني هو أن dlopen أن تفعله حيال ذلك. dlopen () هي وظيفة لغة C وأنه لا يمكن رمي استثناء. ما يمكن أن يلقي هو في الواقع وظائف التهيئة في الأشياء المشتركة، على سبيل المثال، عبارات تقوم بتعيينها إلى الأجسام الساكنة بك. على سبيل المثال، إذا كنت أكتب هذا في كائن المشتركة كنت تحميل، قد تعطل مع bad_alloc:

// dso.cpp start
#include <dso.h>

Object* instance = new Object();

// the rest of the file

ولكن الاشياء dlopen غير ذي صلة تماما، وأفترض.

وربما هو لأنه لا يمكن العثور على كل تبعياته.

وتغيير الدليل إلى الدليل حيث قمت حياة التطبيق.
ثم استخدم نانومتر على المشترك ليب تحاول تحميل (مسار نفس استخدمته في التعليمات البرمجية).
هذا وسوف تظهر أي تبعيات في عداد المفقودين.

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