سؤال

في 'ج'، لينكس،

هل أحتاج مكتبات ثابت لربط بشكل ثابت، أو تلك المشتركة لدي يكفي؟ إذا لم يكن كذلك، لماذا لا؟ (لا أنها تحتوي على نفس البيانات؟)

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

المحلول

نعم، تحتاج مكتبات ثابتة لبناء قابل للتنفيذ مرتبطة بشكل ثابت.

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

ترتبط بالفعل

والمكتبات الديناميكية. وهذا يعني أن بعض المعلومات مثل الترحيل سبق ثابتة حتى وطرد.

وبالإضافة إلى ذلك، يجب أن يكون ترجمة مكتبات حيوية، رمز موقف مستقل. هذا ليس قيدا على مكتبات ثابتة، والنتائج في اختلاف كبير في الأداء على بعض الأنظمة الأساسية المشتركة (مثل x86) و.

ووتوجد أدوات مثل ELF Statifier التي تحاول حزمة مكتبات مرتبطة بشكل حيوي في تنفيذ مرتبطة بشكل حيوي، ولكن من الصعب جدا أن تولد نتيجة العمل بشكل صحيح في جميع الظروف.

نصائح أخرى

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

قد أو قد لا يحتوي

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

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

وثمة خيار آخر هو فرو القاقم ( http://magicErmine.com ) انها مثل statifier، ولكنها قادرة على التعامل مع التوزيع العشوائي الذاكرة.

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