يهيئ البرنامج الرئيسي والمكتبة المشتركة نفس المتغير الثابت في __static_initialization_and_destruction_0
-
26-09-2019 - |
سؤال
هل يعرف أي شخص سبب تهيئة المكتبة داخل DLOPEN () تهيئة متغير ثابت يملكه البرنامج الرئيسي. يحتوي كل من البرنامج الرئيسي والمكتبة المشتركة على نسخة من المتغير الثابت ، ولكن لسبب ما تعيد المكتبة المشتركة أن تعيد نسخ البرنامج الرئيسي للمتغير الثابت وتدمرها ، مما تسبب في Segfault عندما يحاول البرنامج الرئيسي تدميره.
هل هذه حالة من الأسماء السيئة التي تتجول في جدول الرموز؟
المحلول
هذه حالة لا يريد فيها رابط وقت التشغيل سوى نسخة نشطة واحدة من الرمز في العملية. إذا كان لكل من الكائن المشترك والقابل للتنفيذ نسخة من الرمز ، فسيقوم رابط وقت التشغيل بحل جميع الإشارات إلى واحدة من هذه الإشارات.
ما يمكنك فعله لحل هذه المشكلة هو استخدام تخفيض الرموز باستخدام أمر الإصدار من محرر الارتباط عند إنشاء الكائن المشترك. تأكد من أن رمز المتغير الثابت ليس عالميًا وستحصل على السلوك الذي تبحث عنه.