إجبار إدراج ملفات كائنات مكتبة ثابتة لا تصدر أي رموز (GCC / iPhone)

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

سؤال

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

ركضت في هذه المشكلة على مترجم Metrowerks منذ فترة، ولكن في هذه الحالة كانت تحدث حتى عندما تم تصميم التعليمات البرمجية في تطبيق واحد دون أي مكتبات متوسطة. كان الحل واضحا جدا: استخدم فقط __declspec(force_export) على حالات الطبقة الخاصة وكل شيء على ما يرام.

هل هناك أي ما يعادل دول مجلس التعاون الخليجي / اي فون؟ أنا أستخدم XCode 3.1.4 مع GCC 4.2 واستهداف iPhone OS 3.1. بدلا من ذلك، هناك طريقة لإخبار التطبيق بالارتباط في كل ملف كائن في المكتبة الثابتة بغض النظر عما إذا كان الأمر كذلك بالدراسة أم لا؟ لقد أكدت استخدام ar أن المجموعة الكاملة من ملفات الكائنات تجعلها في المكتبة الثابتة.

شكرا مقدما.

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

المحلول

أعتقد أن الخيار الذي تبحث عنه هو -all_load:

   -all_load
       Loads all members of static archive libraries.  See man ld(1) for
       more information.

نصائح أخرى

-all_load لديه بعض المشكلات إذا حدثت ربط العديد من المكتبات و / أو الأطر (Mac OS X). في هذه الحالة، يجب عليك فقط إجبار جميع الرموز من مكتبة محددة باستخدام -force_load:

g++ test.cpp -o test -force_load libtoload.a
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top