سؤال

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

هل هناك أي طريقة لتحويل ملف .a ثابت في ملف .so مشترك؟ أو أكثر عموما هناك طريقة جيدة لتجمع عدد كبير من الملفات .a ثابتة مع عدد قليل من الملفات الكائن .o في ملف .so واحد؟

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

المحلول

هل هذا (مع -L مناسبا للطبعا)

gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib

لا تفعل ذلك؟

نصائح أخرى

وأنت لا تستطيع أن تفعل هذا إذا تم تصنيف الكائنات ضمن مكتبة ثابتة دون -fPIC أو ما شابه.

g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object

وأنا لست متأكدا من دول مجلس التعاون الخليجي، ولكن لز ++ كان لي أن أضيف خيار رابط --whole-أرشيف لتشمل الكائنات من مكتبات ثابتة في الكائن المشترك. الخيار -ما لا-هول-أرشيف ضروري إذا كنت تريد أن تصل إلى libc_static_lib.a وlibother_shared_object.so، ولكن ليس تضمينها ككل في megalib.so.

ar -x lib***.a
gcc -shared *.o -o lib***.so

وar -x يمكن أن تكون مفيدة أيضا إذا كنت ترغب في التركيز على أشياء محددة من .as الخاص بك وأنت لا تريد إضافة أي شيء بنفسك.

والأمثلة على ذلك:

ar -x lib***.a
gcc -shared *.o -o lib***.so
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top