मैं autoconf, automake, और libtool के साथ एक प्रोग्राम बना रहा हूँ। मेरे काम की आवश्यकता है कि मैं स्थिर रूप से लिंक (अधिकांश) पुस्तकालयों। यह अतीत में कोई समस्या नहीं है क्योंकि मैं -all-static
के साथ सब कुछ स्थिर रूप से लिंक कर सकता था। अब यह एक समस्या है क्योंकि मुझे पुस्तकालय का उपयोग करना है जो केवल गतिशील है; यह हमें तीसरे पक्ष द्वारा दिया गया था, और हमारे पास स्रोत नहीं है।एक autotools उपयोगकर्ता स्थिर और गतिशील लिंकिंग का संयोजन कैसे निर्दिष्ट कर सकता है?
बेशक, -all-static
अब निर्माण विफल होने का कारण बनता है। क्या यह संभव है इस लाइब्रेरी को छोड़कर, सब कुछ लिंक करने के लिए libtool बताएं? क्या libtool स्थिर और गतिशील लिंकिंग का कोई संयोजन करना संभव है, या यह सब कुछ या कुछ भी नहीं है?
अब तक मैंने LDFLAGS = -static
के साथ सुविधा लाइब्रेरी बनाने का प्रयास किया है, जो उन पुस्तकालयों पर निर्भर करता है जिन्हें मैं स्थिर रूप से लिंक करना चाहता हूं। लेकिन libtool स्थिर पुस्तकालयों को संगत नहीं करता है, जैसा कि मैंने आशा की थी। सुविधा पुस्तकालय के आधार पर कार्यक्रम अभी भी गतिशील रूप से सबकुछ जोड़ता है।
मैंने --disable-shared
भी कोशिश की है, लेकिन इससे निर्माण प्रभावित नहीं हुआ।
इन सवालों समान हैं, लेकिन वास्तव में मेरे सवाल का जवाब नहीं है:
Force linking a static library into a shared one with Libtool
Is it possible to link some — but not all — libraries statically with libtool?
(मैं अपने सिस्टम से साझा पुस्तकालयों हटाना नहीं चाहते हैं, और सब कुछ के लिए पूरा पथ निर्दिष्ट करना हाथ से जोड़ने से शायद ही बेहतर है, लेकिन शायद यह एकमात्र तरीका है।)
यह काम करता है, लेकिन कुछ लचीलापन के नुकसान पर।मुझे गतिशील निर्माण की आवश्यकता नहीं है, लेकिन अगर मैंने कभी किया तो मुझे कुछ 'Makefile.am' को संपादित करने की आवश्यकता होगी, है ना? यह 'AC_CHECK_LIB' जैसे मैक्रोज़ के साथ समस्याएं भी उत्पन्न करता है (जो कि' LIL' 'में केवल' -l' जोड़ता है), लेकिन मुझे लगता है कि इसकी अपेक्षा की जा सकती है। – tprk77
मैंने सबसे सरल दृष्टिकोण संभव दिया। हालांकि, कुछ फैंसी के लिए, आप झंडे को अपने 'config.ac' में खींच सकते हैं। एक बार वहां, आप 'DYNLIBS =" - WL, -Bdynamic, -L/path/to, -lshared, -ststatic "' AC_SUBST ([DYNLIBS]) पर कॉल के साथ जोड़ सकते हैं। तो आपको बस अपने 'मेकफ़ाइल.एएम' में '$ (DYNLIBS) 'कॉल करना होगा। इससे आपको अधिक नियंत्रण मिलेगा, लेकिन याद रखें कि 'AC_CHECK_LIBS' स्थिर बनाम गतिशील libs की जांच नहीं करता है। क्या आप यही चाहते हैं या कुछ और है जो इसे और अधिक लचीला बना देगा? – NickW
हाँ मुझे लगता है कि काम करेगा, धन्यवाद! – tprk77