لماذا shl_load() الفشل في المكتبات مع الموضوع التخزين المحلي ؟

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

سؤال

المواضيع في بيرل الافتراضي الخاص بك المحلية تخزين جميع المتغيرات ، للتقليل من أثر على المواضيع الموجودة غير موضوع علم القانون.في بيرل ، وهو موضوع مشترك متغير يمكن إنشاؤها باستخدام سمة:

use threads;
use threads::shared;

my $localvar;
my $sharedvar :shared; 

HP-UX وقت التشغيل محمل لا يدعم التحميل الديناميكي من المكتبات المشتركة التي تحتوي على (TLS) التخزين المحلي لمؤشر الترابط.
ونتيجة لذلك, عند محاولة استيراد الوحدات التي تحتوي على TLS الخطأ التالية هي ذكرت:

"/usr/lib/dld.sl: Can't shl_load() a library containing Thread Local Storage"

إذا كنت لا تعرف لماذا أنا على الحصول على خطأ أنا فقط من غير الواضح لماذا سيكون من الصعب تحميل مكتبة مع TLS ؟

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

المحلول

طريقة TLS تخزين إعداد يعتمد على TLS الوصول نموذج.

في أبسط "الأولية للتنفيذ / TLS ثابتة" نموذج محمل يضع TLS الجزء قبل أول تعليمات التنفيذي الرئيسي هو تشغيل.فإنه يحسب حجم هذه الشريحة عن طريق إضافة TLS المتطلبات الرئيسية للتنفيذ و جميع المكتبات المشتركة مباشرة يعتمد على.

مرة واحدة هذا TLS الجزء هو تخصيص وإعداد التطبيق يبدأ تشغيل و قد متجر المؤشرات في TLS الجزء.وبالتالي من المستحيل أن realloc() تخزين الجزء -- المحمل ليس لديهم فكرة عن أي مؤشرات في التطبيق يجب أن يتم تحديث.

منذ كنت لا يمكن realloc الجزء ، و حيث لا يوجد مساحة في ذلك لمزيد من المتغيرات ؛ كيف يمكن محمل التعامل مع تحميلها بشكل حيوي المكتبات التي تتطلب TLS تخزين خاصة بهم ؟

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

على Solaris و لينكس فمن الممكن لتحميل حيوي المكتبات مع التعسفي TLS متطلبات باستخدام "ديناميكية عامة TLS نموذج".

يبدو أن HP-UX v1.6 أيضا يدعم هذا النموذج في الواقع يجعل الافتراضي.ولكن أنت ربما تشغيل قديمة إطلاق نظام التشغيل, حيث أن هذا النموذج ليس هو الافتراضي, و قد لا تكون معتمدة على الإطلاق.تحقق إذا كان لديك إصدار مترجم يدعم +tls=dynamic الخيار, وإذا كان الأمر كذلك ما إذا كان البناء مع ذلك يساعد.

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