लिनक्स पर, क्या ईएलएफ बाइनरी में संस्करण जानकारी एम्बेड करने का कोई तरीका है? मैं इस जानकारी को संकलित समय पर एम्बेड करना चाहता हूं ताकि इसे बाद में एक स्क्रिप्ट का उपयोग करके निकाला जा सके। एक हैशिश तरीका कुछ ऐसा लगाएगा जिसे strings
कमांड का उपयोग करके निकाला जा सके। क्या विंडोज़ डीएलएल के लिए विजुअल स्टूडियो प्लांट वर्जन जानकारी (डीएलएल गुणों में नोट संस्करण टैब) के समान कैसे एक पारंपरिक तरीका है?लिनक्स: साझा पुस्तकालय और बाइनरी में संस्करण जानकारी कैसे एम्बेड करें?
उत्तर
सीवी या उपवर्तन का उपयोग करते हुए ऐसा करने का एक तरीका है विशेष स्रोत स्ट्रिंग विशेष रूप से आपकी स्रोत फ़ाइल में स्वरूपित है। फिर सीवीएस या एसवीएन को प्री-प्रतिबद्ध हुक जोड़ें जो परिवर्तन के दौरान फ़ाइल के नए संस्करण के साथ उस विशेष चर को अद्यतन करता है। फिर, जब बाइनरी बनाया जाता है, तो आप उस जानकारी को निकालने के लिए पहचान का उपयोग कर सकते हैं। उदाहरण के लिए:
अपने cpp फाइल करने के लिए कुछ इस तरह करें:
static char fileid[] = "$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $";
और चल अध्यक्ष कार्यक्रम पर (जो आप आरसीएस स्थापित करके प्राप्त कर सकते हैं) एक आईडी स्ट्रिंग है कि फ़ाइलों के बारे में जानकारी दिखाना चाहिए उनमे।
ident program
program:
$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $
नोट के रूप में लोगों को टिप्पणी में उल्लेख किया है कि इस तकनीक पुरातन है। स्रोत नियंत्रण प्रणाली स्वचालित रूप से बदल जाती है, आपका स्रोत कोड बदसूरत है और तथ्य यह है कि स्रोत नियंत्रण में सुधार हुआ है जब सीवीएस एकमात्र विकल्प था जिसका मतलब है कि आप एक ही लक्ष्य को प्राप्त करने के लिए एक बेहतर तरीका ढूंढ सकते हैं।
+1: मैं पहले कभी भी पहचान में नहीं आया, सबसे उपयोगी। –
'पहचान' एक बार बहुत उपयोगी था, लेकिन वितरित संस्करण नियंत्रण प्रणाली की दुनिया में '$ आईडी $' तारों को एम्बेड करना मूर्खतापूर्ण हो गया है। यह diffs और विलय उलझन में है। – cdunn2001
इंटेल फोर्ट्रान और सी ++ कंपाइलर निश्चित रूप से ऐसा कर सकते हैं, -sox
विकल्प का उपयोग करें। तो, हाँ एक रास्ता है। मुझे बाइनरी में ऐसी जानकारी एम्बेड करने के लिए किसी भी व्यापक सम्मेलन की जानकारी नहीं है और मैं आमतौर पर एम्बेडेड जानकारी पढ़ने के लिए हेक्सल-मोड में Emacs का उपयोग करता हूं, जो काफी हैकिश है।
'-sox' निष्पादन योग्य बनाने के लिए उपयोग किए गए कंपाइलर विकल्पों को भी एम्बेड करता है, जो बहुत उपयोगी है।
यदि आप program_version
नामक एक चर घोषित करते हैं या इसी तरह आप यह पता लगा सकते हैं कि वेरिएबल किस पते पर संग्रहीत है और फिर इसके मूल्य को निकालने के लिए आगे बढ़ें। जैसे कि program_version
पता 0000000000600a24
में रहता है और आकार 4. की है तो बस फाइल में उस पते पर मूल्य पढ़
objdump -t --demangle /tmp/libtest.so | grep program_version
0000000000600a24 g O .data 0000000000000004 program_version
मुझसे कहता है।
या आप केवल एक साधारण प्रोग्राम लिख सकते हैं जो लाइब्रेरी को प्रश्नों से जोड़ता है और संस्करण को मुद्रित करता है, जिसे या तो निर्यात किए गए चर या फ़ंक्शन के रूप में परिभाषित किया जाता है। जबकि परहेज
, @sashang जवाब विस्तार करने के लिए "$ क्रमांक: $" मुद्दों @ cdunn2001, ...
ने उल्लेख आप केवल है कि एक फ़ाइल "version_info.h" अपनी परियोजना के लिए जोड़ सकते हैं:
#define VERSION_MAJOR "1"
#define VERSION_MINOR "0"
#define VERSION_PATCH "0"
#define VERSION_BUILD "0"
और अपने main.c फ़ाइल में रेखा है:
static char version[] = VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH "." VERSION_BUILD;
static char timestamp[] = __DATE__ " " __TIME__;
(या आप अपने कार्यक्रम में इन मूल्यों का उपयोग करना चाहते हालांकि)
0,123,फिर एक प्री-बिल्ड चरण सेट करें जो version_info.h फ़ाइल को पढ़ता है, संख्याओं को उचित रूप से बाध्य करता है, और इसे फिर से लिखता है।एक दैनिक निर्माण केवल VERSION_BUILD संख्या को टक्कर देगा, जबकि एक और गंभीर रिलीज अन्य नंबरों पर टक्कर लगी होगी।
यदि आपकी मेकफ़ाइल आपकी ऑब्जेक्ट की पूर्व शर्त सूची पर सूचीबद्ध करती है, तो बिल्ड को इसकी आवश्यकता के अनुसार पुन: संकलित कर दिया जाएगा।
- 1. लिनक्स साझा पुस्तकालय सी ++
- 2. कक्षा पुस्तकालय के अंदर एक बाइनरी फ़ाइल एम्बेड करना
- 3. ऑटोमेक और मानक साझा पुस्तकालय
- 4. संस्करण जानकारी
- 5. एक स्थिर पुस्तकालय में संस्करण संख्या को कैसे स्टोर करें?
- 6. स्थिर और साझा सी ++ पुस्तकालय दोनों बनाना
- 7. वैश्विक चर, साझा पुस्तकालय और -एफपीआईसी प्रभाव
- 8. वैकल्पिक साझा पुस्तकालय
- 9. मेवेन आर्केटाइप में आर्चेटाइप प्रोजेक्ट संस्करण को कैसे एम्बेड करें?
- 10. प्रोटोटाइप पुस्तकालय में ब्राउज़र और संस्करण?
- 11. लिनक्स, जीएनयू जीसीसी, एलडी, संस्करण स्क्रिप्ट और ईएलएफ बाइनरी प्रारूप - यह कैसे काम करता है?
- 12. कैसे साझा आईआरक्यू दौड़ लिनक्स
- 13. डेल्फी में स्वचालित रूप से संस्करण जानकारी कैसे सेट करें?
- 14. दोनों विंडोज़ और लिनक्स पर्यावरण में Gemfile.lock साझा करना
- 15. Winform में IE संस्करण जानकारी कैसे प्राप्त करें?
- 16. इमारत और एक साझा पुस्तकालय जोड़ने
- 17. संगठन मोड: जानकारी फ़ाइलों के लिए लिंक एम्बेड करें
- 18. वेबस्पेयर साझा पुस्तकालय "प्राथमिकता"?
- 19. जीसीसी लिंक साझा पुस्तकालय
- 20. कैसे स्वचालित रूप से साझा पुस्तकालय
- 21. लिनक्स में एक स्थिर पुस्तकालय कैसे संकलित करें?
- 22. सी ++ मानक पुस्तकालय के संस्करण
- 23. बड़ी फ़ाइलों से संस्करण जानकारी पुनर्प्राप्त करें
- 24. आप एक्सएमएल में बाइनरी डेटा कैसे एम्बेड करते हैं?
- 25. लिनक्स गतिशील लिंकर से "कोई संस्करण जानकारी उपलब्ध नहीं है" त्रुटि का क्या अर्थ है?
- 26. लिनक्स वितरण बाइनरी संगतता
- 27. सी ++ स्थिर पुस्तकालय में साझा वैश्विक चर
- 28. लिनक्स पर प्रोजेक्ट में साझा पुस्तकालयों (.so) में से किसी एक में फ़िक्स कैसे करें?
- 29. लिनक्स पर साझा पुस्तकालयों के संबंध में अच्छे अभ्यास क्या हैं?
- 30. जीएनयू ऑटोोटूल: संस्करण जानकारी के बिना पुनर्निर्माण
[फ़ाइल संस्करण जानकारी] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2296101/file-version-Information) –