मेरा मतलब है कि जीसीसी ईएलएफ बाइनरी में कुछ स्रोत कोड संस्करण infor को अनुभाग या कुछ समान के रूप में सम्मिलित कर सकता है या नहीं। मैं अपनी स्रोत फ़ाइल को बदलना नहीं चाहता, लेकिन मेकफ़ाइल में gcc विकल्प के साथ कुछ जानकारी जोड़ें।क्या जीसीसी के पास ईएलएफ बाइनरी फ़ाइल में संस्करण जानकारी जोड़ने के लिए कोई विकल्प है?
उत्तर
आप अपनी संस्करण जानकारी को टेक्स्ट फ़ाइल में छोड़ सकते हैं, फिर उस टेक्स्ट फ़ाइल को उस ऑब्जेक्ट फ़ाइल में बदल दें जिसे आप स्थिर रूप से अपने निष्पादन योग्य में लिंक करते हैं।
पहला कदम सरल है लेकिन आपको कुछ कोड लिखना होगा: एक स्क्रिप्ट या कुछ अपनी प्रारूप जानकारी को किसी भी प्रारूप में लिखने के लिए जिसे आप एक सादे पाठ फ़ाइल के रूप में पसंद करते हैं। फिर objcopy का उपयोग करके संस्करण.txt से कहने के संस्करण को बनाने के लिए मेकफ़ाइल नियम लिखें। अब आपके पास एक ऑब्जेक्ट फ़ाइल होगी जिसमें परिभाषित दो उपयोगी प्रतीकों होंगे: पाठ संस्करण संस्करण की शुरुआत और अंत। उस निष्पादन योग्य वस्तु को उस निष्पादन योग्य में जोड़ें, और आप दो तरीकों से संस्करण तक पहुंच पाएंगे: बाइनरी पर strings
चलाकर, या संस्करण स्ट्रिंग को मुद्रित करने के लिए एप्लिकेशन में कोड लिखकर (आपको शुरुआत घोषित करने की आवश्यकता होगी और कुछ शीर्षलेख फ़ाइल में चर के रूप में अंत प्रतीकों)।
तुम सिर्फ एक बार अपने स्रोत फ़ाइल को बदलने से परहेज नहीं करते हैं, तो कुछ इस तरह जोड़ें:
const volatile static char version[] = VERSION;
और संकलन के साथ:
gcc -c -DVERSION='"1.2.3"'
volatile
उच्च पर स्ट्रिंग हटाने से जीसीसी रहता है अनुकूलन स्तर।
लिखित रूप में, यदि आप -D
विकल्प भूल जाते हैं, तो यह संकलित नहीं होगा, जो आपकी आवश्यकताओं के आधार पर अच्छा या बुरा हो सकता है।
आप उपयोग कर सकते हैं
--version-script=version-scriptfile
पर कमांड लाइन विकल्प के बारे में और अधिक पढ़ें: Using LD, the GNU linker - Version Script
करते हैं: Using LD, the GNU linker - Options
पर संस्करण स्क्रिप्ट बनाने के बारे में और अधिक पढ़ें हालांकि मैं आपको चेतावनी देता हूं कि यह कमजोर दिल के लिए नहीं है!
संस्करण स्क्रिप्ट्स केवल संकलक सेटिंग्स रिकॉर्डिंग की तुलना में विभिन्न उद्देश्यों के लिए लक्षित हैं। – o11c
यहां तक कि अगर आप अपने स्रोत के लिए उपयोग अब और नहीं है, तो आप इस विकल्प के साथ वस्तु लिंक कर सकते हैं:
gcc -Wl,--defsym,VERSION_1_2_3=0 prog.o -o prog
आप इसे hexdump -C prog | less
साथ की जाँच करें और VERSION
लिए देख सकते हैं अपने makefile
को यह जोड़ें और जब एक प्रोग्राम संकलित किया गया था हमेशा पता करना न भूलें:
BUILD = $(shell date +"%Y%m%d_%H%M%S")
LDLIBS = -Wl,--defsym,BUILD_$(BUILD)=0
- 1. क्या कक्षा में "विकल्प" जोड़ने के लिए कोई पैटर्न है?
- 2. लिनक्स, जीएनयू जीसीसी, एलडी, संस्करण स्क्रिप्ट और ईएलएफ बाइनरी प्रारूप - यह कैसे काम करता है?
- 3. क्या जीसीसी के विकल्प "-Wl, विकल्प" में विकल्प है
- 4. ईएलएफ फ़ाइल को पढ़ने के लिए लाइब्रेरी DWARF डीबग जानकारी
- 5. + पढ़ने + जोड़ने के लिए फ़ाइल मोड + बाइनरी
- 6. क्या जर्चेटेक्ट के पास कोई विकल्प है?
- 7. ईएलएफ बाइनरी में आयात नाम
- 8. - जीसीसी के लिए स्टेटिक विकल्प?
- 9. क्या जीसीसी के लिए कोई विकल्प है जो ध्वज को छोड़ देता है?
- 10. क्या जीसीसी कंपाइलर के पास संकलन समय पर स्मृति भ्रष्टाचार को पहचानने का कोई विकल्प है?
- 11. कोई संस्करण जानकारी उपलब्ध
- 12. क्या एलवीएम-जीसीसी और क्लैंग बाइनरी जीसीसी के साथ संगत है? - विंडोज
- 13. ईएलएफ
- 14. किसी सूची में विकल्प जोड़ने के लिए
- 15. मैं ईएलएफ फ़ाइल में किसी अनुभाग के रूप में टेक्स्ट फ़ाइल की सामग्री कैसे जोड़ूं?
- 16. सेमेक में जीसीसी के -विंडोज़ विकल्प के बराबर क्या है?
- 17. मेक जीसीसी डिबग जानकारी
- 18. क्या printf के लिए कोई विकल्प है?
- 19. क्या ईएलएफ फ़ाइल में मनमाने ढंग से डेटा जोड़ना ईएलएफ स्पेक का उल्लंघन करता है?
- 20. क्या '#' + div_id के लिए कोई विकल्प है?
- 21. जीसीसी त्रुटि: गलत ईएलएफ वर्ग: ELFCLASS64
- 22. संस्करण अनुकूल, विस्तारणीय बाइनरी फ़ाइल प्रारूप
- 23. क्या जीसीसी में स्टडकॉल के लिए कोई समकक्ष है?
- 24. ईएलएफ कोर फ़ाइल प्रारूप
- 25. क्या jsPlumb के लिए कोई विकल्प हैं?
- 26. ईएलएफ फ़ाइल में अनुभाग जोड़ना
- 27. संस्करण जानकारी के लिए सर्वोत्तम अभ्यास?
- 28. मल्टीमीडिया बाइनरी फ़ाइल - मामूली संस्करण मेटाडाटा प्रकाशित करने के लिए लेकिन वास्तविक बाइनरी नहीं है?
- 29. लिनक्स: साझा पुस्तकालय और बाइनरी में संस्करण जानकारी कैसे एम्बेड करें?
- 30. क्या XmlUnit के लिए कोई विकल्प हैं?
धन्यवाद। मुझे लगता है कि ओबजॉपी के साथ बेहतर तरीका है: objcopy --add-section versection = version_text मुख्य main_version। और "objdump -s -j versection main_version" के साथ, संस्करण को पुनर्प्राप्त किया जा सकता है। – Lane
हाय जॉन, मुझे लगता है कि आप सक्रिय सदस्य हैं, भले ही यह उत्तर पुराना हो। क्या आप इसे किसी ऑब्जेक्ट में टेक्स्ट फ़ाइल को संकलित करने के बारे में कुछ बहुत ही बुनियादी/सरल उदाहरण के साथ अपडेट करना चाहते हैं? "संस्करण 1.1.1" या कुछ कहें। यह सही सवाल है जिसे मैं बनाने जा रहा था, और, ठीक है, यह एक (अधिक/कम) "डुप्लिकेट" होगा ... –
@DrBeco: लिनक्स पर आप '--input binary' और' --output' प्रारूपों के साथ स्पष्ट रूप से निर्दिष्ट 'objcopy' का उपयोग कर सकते हैं। यहां पर एक पूर्ण ट्यूटोरियल है: http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967। आप कुछ विकल्पों के साथ 'ld' का भी उपयोग कर सकते हैं, मुझे लगता है कि' -b' एक ही चीज़ के बारे में करना है, शायद आपके सटीक परिदृश्य के आधार पर भी आसान है। –