मूल रूप से करने के कम से कम तीन तरीके हैं। पहला और सबसे पोर्टेबल तरीका libtool का उपयोग करना है।
libtool --mode=link cc -static -o libaz.la libabc.la libxyz.la
अन्य दो कम से कम उपलब्ध हैं: के बाद भी libtool साथ अन्य पुस्तकालयों का निर्माण किया है, तो आप उन्हें सिर्फ एक automake libaz_la_LIBADD चर को .la libs जोड़कर सीधे एक Makefile से की तरह कुछ के साथ गठजोड़ कर सकते हैं, या जीएनयू आरआर का उपयोग करते समय। आप एक एमआरआई स्क्रिप्ट का उपयोग कर सकते हैं (उदाहरण के लिए नाम libaz।एमआरआई), जैसे:
create libaz.a
addlib libabc.a
addlib libxyz.a
save
end
और उसके बाद निष्पादित ar के रूप में:
ar -M <libaz.mri
या आप एक पतली संग्रह (विकल्प -T
) है, जो उन्हें नेस्ट प्राप्त किए बिना अन्य अभिलेखागार जोड़ने की अनुमति देगा का उपयोग कर सकते अंदर, हालांकि नकारात्मकता यह है कि यदि आप स्थैतिक पुस्तकालय को वितरित करना चाहते हैं, तो अलग वस्तु गायब हो जाएगी:
ar -rcT libaz.a libabc.a libxyz.a
सभी उपरोक्त विधियां मूल अभिलेखागार से ओवरलैपिंग सदस्य नामों को गहन रूप से संभालती हैं।
अन्यथा, आप अलग अलग निर्देशिका में खोल और फिर repack, ओवरलैपिंग सदस्य के नाम की जगह से बचने के लिए करना होगा:
mkdir abc; cd abc; ar -x ../libabc.a
mkdir xyz; cd xyz; ar -x ../libxyz.a
ar -qc libaz.a abc xyz
स्रोत
2014-05-13 02:09:04
भी देखें: [ 'libtool' आधारित समाधान] (http: // stackoverflow। कॉम/ए/8170851/1 9 6561): 'libtool -static -o new.a old1.a old2.a' – osgx
यह सही काम करता है, अगर उन पुस्तकालयों में सामान्य फ़ाइल है तो थोड़ा सा संदेह है। (लेकिन कार्यक्षमता के अनुसार वे अलग हैं) क्या यह अभी भी काम करेगा? – bindingofisaac