2009-06-11 16 views
16

लिनक्स में, एक प्रोग्राम स्रोत डाउनलोड किया गया और इसे स्थिर रूप से लिंक करना चाहते हैं। वहाँ एक बहुत बड़ा Makefile, मैंएक जटिल प्रोग्राम को स्थिर रूप से लिंक करने के लिए कैसे करें

./configure 
make 

संकलित करने के लिए है। prehpes यह पूछने के लिए थोड़ा सा सामान्य है, लेकिन मैं बाइनरी को स्थिर रूप से कैसे जोड़ सकता हूं? धन्यवाद।

संपादित करें: इसका कारण यह सुनिश्चित करना है कि बाइनरी पर कोई निर्भरता नहीं है (या कम से कम जितनी कम हो सके), जिससे किसी भी लिनक्स आधारित कंप्यूटर पर चलना संभव हो, यहां तक ​​कि इंटरनेट कनेक्शन के बिना भी, और गैर अद्यतन लिनक्स।

+1

स्टेटिक लिंकिंग को हानिकारक माना जाता है! http://people.redhat.com/drepper/no_static_linking.html मुझे खेद है, यह आपके प्रश्न का सीधा जवाब नहीं है, लेकिन मैं बस इसे इंगित करना चाहता था। –

उत्तर

25

अधिकांश autoconf उत्पन्न configure स्क्रिप्ट आप एक स्थिर निर्माण बनाने के लिए अनुमति देगा:

./configure --enable-static 
make 

यदि वह काम नहीं करता, तो आप LDFLAGS के माध्यम से में लिंकर झंडे पारित करने के लिए, इस तरह सक्षम हो सकता है:

./configure LDFLAGS=-static 
+0

बहुत अच्छा जवाब, दुर्भाग्य से दोनों किसी कारण से काम नहीं करते थे। –

+0

जो मैं समझता हूं उससे यह काम नहीं करता क्योंकि मुझे लिंक करने के लिए स्थिर पुस्तकालयों की कमी थी। –

+2

CentOS पर स्थिर लिंकिंग के लिए आपको स्थापित करने के लिए आवश्यक संकुल C++ स्थिर लिंकिंग के लिए c और 'libstdC++ - static' के लिए 'glibc-static' हैं। [अधिक जानकारी के लिए यह पोस्ट देखें] (https://www.systutorials.com/5217/how-to-statically-link-c-and-c-programs-on-linux-with-gcc/) –

5

हाँ, आपको फ़ाइल बनाने और संपादित करने के दौरान जीटीसी में -स्टैटिक पैरामीटर जोड़ने की जरूरत है।

1

मुझे लगता है कि यह सी प्रोग्राम की एक श्रृंखला संकलित करने के लिए जीसीसी का उपयोग कर रहा है, हालांकि आपको मेकफ़ाइल को खोजने के लिए देखना होगा।

यदि ऐसा है, तो आप स्थिर लिंकिंग करने के लिए मेकफ़ाइल में जीसीसी लाइनों को समायोजित कर सकते हैं, हालांकि कार्यक्रम की संरचना के आधार पर, यह एक जटिल परिवर्तन हो सकता है। यह देखने के लिए मैन जीसीसी पर एक नज़र डालें।

मुझे यह जानने में दिलचस्पी होगी कि आप स्थिर रूप से लिंक क्यों कर रहे हैं। क्या आपने इसके बजाय प्रीलिंकिंग का उपयोग करने पर विचार किया है?

आपको अवगत होना चाहिए कि यह करने के लिए लाइसेंस समस्याएं हो सकती हैं यदि सभी घटक जीपीएल नहीं हैं।

2

यदि आप एक स्थिर बाइनरी संकलित नहीं कर सकते हैं, तो मेरे पास Statifier का उपयोग करके अच्छे परिणाम हुए हैं।

+0

उत्कृष्ट विचार। मेरे पास एक समान उत्पाद के साथ बहुत अच्छे परिणाम थे। –