يهيئ البرنامج الرئيسي والمكتبة المشتركة نفس المتغير الثابت في __static_initialization_and_destruction_0

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

سؤال

هل يعرف أي شخص سبب تهيئة المكتبة داخل DLOPEN () تهيئة متغير ثابت يملكه البرنامج الرئيسي. يحتوي كل من البرنامج الرئيسي والمكتبة المشتركة على نسخة من المتغير الثابت ، ولكن لسبب ما تعيد المكتبة المشتركة أن تعيد نسخ البرنامج الرئيسي للمتغير الثابت وتدمرها ، مما تسبب في Segfault عندما يحاول البرنامج الرئيسي تدميره.

هل هذه حالة من الأسماء السيئة التي تتجول في جدول الرموز؟

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

المحلول

هذه حالة لا يريد فيها رابط وقت التشغيل سوى نسخة نشطة واحدة من الرمز في العملية. إذا كان لكل من الكائن المشترك والقابل للتنفيذ نسخة من الرمز ، فسيقوم رابط وقت التشغيل بحل جميع الإشارات إلى واحدة من هذه الإشارات.

ما يمكنك فعله لحل هذه المشكلة هو استخدام تخفيض الرموز باستخدام أمر الإصدار من محرر الارتباط عند إنشاء الكائن المشترك. تأكد من أن رمز المتغير الثابت ليس عالميًا وستحصل على السلوك الذي تبحث عنه.

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