यह देखने का कोई तरीका है कि * nix में निष्पादन योग्य फ़ाइल बनाने के लिए किस कंपाइलर और झंडे का उपयोग किया गया था? मेरे पास संकलित मेरे कोड का पुराना संस्करण है और मैं देखना चाहता हूं कि इसे अनुकूलित या अनुकूलित किए बिना संकलित किया गया था या नहीं। Google बहुत उपयोगी नहीं था, लेकिन मुझे यकीन नहीं है कि मैं सही कीवर्ड का उपयोग कर रहा हूं।संकलित निष्पादन योग्य से संकलक विकल्प प्राप्त करें?
उत्तर
जीसीसी कि के लिए एक -frecord-gcc-switches
का विकल्प है।
$ gcc -O2 -frecord-gcc-switches a.c
$ readelf -p .GCC.command.line a.out
String dump of section '.GCC.command.line':
[ 0] a.c
[ 4] -mtune=generic
[ 13] -march=x86-64
[ 21] -O2
[ 25] -frecord-gcc-switches
बेशक, यह उस विकल्प के बिना संकलित निष्पादन योग्य के लिए काम नहीं करेगा।
अनुकूलन के सरल मामले के लिए, आप एक डिबगर का उपयोग कर यदि फ़ाइल डिबग जानकारी के साथ संकलित किया गया था की कोशिश कर सकते। यदि आप इसे थोड़ा सा कदम उठाते हैं, तो आप देख सकते हैं कि कुछ चर 'अनुकूलित' थे। इससे पता चलता है कि अनुकूलन हुआ था।
रीडेल के लिए +1। – Johan
'-फ्रेकोर्ड-जीसीसी-स्विच 'लगभग मुझे चाहिए जो मुझे चाहिए। हालांकि परिणामी खंड में '-प्रप्रप्रोसेस्ड' है, और सभी '-D' मैक्रो परिभाषाएं अब और नहीं हैं। मैं उन्हें कैसे प्राप्त कर सकता हूं? (मैं एक कर्नेल मॉड्यूल का निर्माण कर रहा हूँ।) –
यह ऐसा कुछ है जिसे संकलक समर्थन की आवश्यकता होगी। आप इस बात का जिक्र नहीं करते कि आप किस कंपाइलर का उपयोग कर रहे हैं लेकिन चूंकि आपने अपना प्रश्न linux
टैग किया है, मुझे लगता है कि आप जीसीसी का उपयोग कर रहे हैं - जो कि आप जिस फीचर के बारे में पूछ रहे हैं उसे डिफ़ॉल्ट नहीं करता है (लेकिन -फ्रेकॉर्ड-जीसीसी-स्विच प्रदर्शन करने का विकल्प है इस)।
यदि आप अपनी बाइनरी का निरीक्षण करना चाहते हैं, तो strings
कमांड आपको वह सब कुछ दिखाएगा जो फ़ाइल के भीतर एक पठनीय चरित्र स्ट्रिंग प्रतीत होता है।
मैं अत्यधिक शक यह संभव है:
int main()
{
}
जब साथ संकलित:
gcc -O3 -ffast-math -g main.c -o main
मापदंडों में से कोई भी उत्पन्न वस्तु में पाया जा सकता:
strings main | grep -O3
(no output)
पर भी ...मैं ऑप्टिमाइज़ेशन के साथ और बिना किसी समान "डू-कुछ" प्रोग्राम के लिए उत्पन्न निष्पादन योग्य के बीच तुलना कर रहा था, और वे कुछ अंतर दिखाते हैं ... –
ठीक है, 'रीडल्फ' के साथ जांच से पता चलता है कि यह केवल कुछ अलग व्यवस्था है कार्य, स्पष्ट रूप से चिल्लाते हुए कुछ भी नहीं "यह '-O3' के साथ संकलित किया गया था"। –
आप तो -frecord-gcc-switches
ध्वज के साथ संकलित करें, फिर कमांड लाइन कंपाइलर विकल्प बाइनरी में वें में लिखा जाएगा ई नोट अनुभाग। See also the docs।
-frecord-gcc-switches
This switch causes the command line that was used to invoke the compiler to
be recorded into the object file that is being created. This switch is only
implemented on some targets and the exact format of the recording is target
and binary file format dependent, but it usually takes the form of a section
containing ASCII text.
बाद में, ELF निष्पादनयोग्य कि जानकारी के साथ .GCC.command.line
अनुभाग में शामिल होंगे:
यदि आपके पास अभी भी कंपाइलर (एक ही संस्करण) है जिसका उपयोग आपने किया है, और यह केवल एक ध्वज है जिसके बारे में आप अनिश्चित हैं, तो आप ध्वज के बिना एक बार और बार बार अपना कोड संकलित करने का प्रयास कर सकते हैं। फिर आप निष्पादन योग्य की तुलना कर सकते हैं। आपका पुराना एक समान, या बहुत समान होना चाहिए, नए लोगों में से एक के लिए।
एक और विकल्प है- grecord-gcc-swtiches (नोट, नहीं -f लेकिन -g)। जीसीसी डॉक्स के अनुसार यह झंडे डीबग जानकारी में झंडे डाल देगा। और ऐसा लगता है कि यह जीसीसी 4.8 के बाद डिफ़ॉल्ट रूप से सक्षम है।
मुझे उन cflags निकालने के लिए dwarfdump प्रोग्राम उपयोगी पाया गया है। नोट, स्ट्रिंग प्रोग्राम उन्हें नहीं देखता है। ऐसा लगता है कि बौना जानकारी संपीड़ित है।
- 1. संकलित सी ++ निष्पादन योग्य विशाल?
- 2. एपीजे - एकल निष्पादन योग्य में संकलित?
- 3. निष्पादन योग्य
- 4. निष्पादन योग्य
- 5. संकलित संकलक द्वारा संकलित कोड का प्रदर्शन
- 6. सी ++ से निष्पादन योग्य साझा लाइब्रेरी सूची कैसे प्राप्त करें?
- 7. संकलक संकलित - कितनी बार?
- 8. निष्पादन योग्य
- 9. डिबगिंग विकल्प कैसे-बाइनरी निष्पादन योग्य बदलें?
- 10. निष्पादन योग्य
- 11. निष्पादन योग्य
- 12. निष्पादन योग्य
- 13. गैर निष्पादन निष्पादन योग्य फ़ाइल
- 14. निष्पादन योग्य के छोटे आकार को कैसे प्राप्त करें?
- 15. निष्पादन योग्य
- 16. निष्पादन योग्य
- 17. सी ++/साइथन परियोजना को निष्पादन योग्य तरीके से कैसे संकलित करें?
- 18. निष्पादन योग्य
- 19. निष्पादन योग्य
- 20. निष्पादन योग्य
- 21. matlab निष्पादन योग्य
- 22. PyInstaller धीमी निष्पादन योग्य
- 23. विंडोजसी ++/सीएलआई में एप्लिकेशन निष्पादन योग्य नाम कैसे प्राप्त करें?
- 24. निष्पादन योग्य
- 25. निष्पादन योग्य
- 26. एक स्टैंडअलोन स्टेटिक निष्पादन योग्य
- 27. एक पायथन प्रोग्राम संकलित करता है जो एक निष्पादन योग्य
- 28. एक ईएलएफ निष्पादन योग्य
- 29. सी # निष्पादन योग्य निष्पादन निर्देशिका
- 30. निष्पादन योग्य अमान्य एंटाइटेलमेंट
ऐसा लगता है कि 'फ्रीकॉर्ड-जीसीसी-स्विच' जीसीसी के लिए चाल है, लेकिन क्या इंटेल (आईसीसी) के लिए एक समान ध्वज है? – Mosby
क्या फ्रीकॉर्ड-जीसीसी-स्विच के बिना ऐसा करने का कोई तरीका है? जैसे लूप अनोलिंग के स्तर को देखें और – OneSolitaryNoob