2012-07-30 20 views
23

मैं कैसे पता लगा सकता हूं कि -march डिफ़ॉल्ट तर्क वर्तमान आर्किटेक्चर के लिए है यदि मैं कोई आपूर्ति नहीं करता हूं?वर्तमान जीसीसी आर्किटेक्चर प्राप्त करना

+1

क्या 'gcc -v' पर्याप्त जानकारी प्रदान करता है? – Jens

उत्तर

55

gcc -dumpmachine आपको लक्ष्य ट्रिपलट देता है, उदा। x86_64-unknown-linux-gnu

gcc -v से पता चलता जीसीसी एक --with-arch विकल्प के साथ कॉन्फ़िगर किया गया था (या --with-arch-32 और/या --with-arch-64) तो है कि क्या डिफ़ॉल्ट होगा।

--with-arch विकल्प के बिना (और यदि उपयोग में कोई कस्टम चश्मा फ़ाइल नहीं है) तो उपयोग किया गया आर्क लक्ष्य के लिए डिफ़ॉल्ट होगा।

86 के लिए, करने के लिए और सहित जीसीसी 4.4 अप, 32-बिट के लिए डिफ़ॉल्ट जीसीसी 4.5 और बाद के संस्करणों के साथ -march=i386 और के लिए 64-बिट -march=x86-64 था (अंडरस्कोर के बजाय हाइफन ध्यान दें।)

x86 के लिए डिफ़ॉल्ट आर्क लक्ष्य लक्ष्य से अनुमानित है यानी i586-pc-linux-gnu के लिए कॉन्फ़िगर करना मतलब है कि डिफ़ॉल्ट -march=i586 है, core2-pc-linux-gnu के लिए कॉन्फ़िगर करना डिफ़ॉल्ट है -march=core2

कुछ अन्य प्लेटफार्म भी लक्ष्य ट्रिपलेट से डिफ़ॉल्ट कमान का अनुमान लगाते हैं (और जीसीसी 4.4 से पहले किए गए हैं) उदा। ultrasparc2-sun-solaris2.10 का अर्थ है -march=ultrasparc2

+3

'gcc -dumpmachine' विकल्प सही है। एक और उदाहरण है कि स्टैक ओवरफ्लो पर दो दूसरी खोज कैसे जीसीसी मैन पेज के एक और पढ़ने से बचाती है! –

+0

मैंने मैनुअल पढ़ा है, और इसका आनंद लिया है। मेरा मतलब था कि आप मैन पेज के माध्यम से जाने के बजाय अधिक मानव खोज शब्दों के साथ स्टैक ओवरफ्लो खोज सकते हैं। उदाहरण के लिए, मैंने पहले 'gcc -dumpmachine' का उपयोग किया है लेकिन तर्क नाम याद नहीं कर सका। हालांकि मैं कभी-कभी सही तर्क के लिए मैन पेज में एक आसान खोज नहीं कर सकता। हो सकता है कि मुझे बदलना चाहिए "से" किसी अन्य खोज से बचाता है "; –

+0

आह हां, काफी उचित है, मैन्युअल में खोज करने के लिए सटीक शब्द को याद करने से निश्चित रूप से आसान है, क्योंकि यदि आप इसे याद कर सकते हैं तो आप ' इसे देखने की जरूरत नहीं है! –

6

आदेश

gcc -v 

चल रहा है कुछ इस तरह दिखाई देगा:

COLLECT_GCC=gcc 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/lto-wrapper 
Target: x86_64-unknown-linux-gnu 
Configured with: /build/src/gcc-4.7.1/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --enable-libstdcxx-time --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --disable-ppl-version-check --disable-cloog-version-check --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --with-linker-hash-style=gnu --enable-multilib --disable-libssp --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-checking=release 
Thread model: posix 
gcc versie 4.7.1 (GCC) 

Target: लाइन तुम क्या चाहते है। आप इससे पर्याप्त जानकारी कम करने में सक्षम होना चाहिए।

+4

"x86_64-अज्ञात-लिनक्स-gnu" का क्या हिस्सा आप '-मार्क' के साथ उपयोग कर सकते हैं? –

+0

पहला भाग: 'x86_64'। लेकिन यह एक सामान्य है। जीसीसी मैनुअल में एक पूर्ण सूची मिल सकती है: https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/x86-Options.html#x86- विकल्प। – rubenvb

3

मुझे लगता है कि उत्तर कोई समकक्ष नहीं है। या तो आप -march= निर्दिष्ट नहीं करते हैं और संकलक आर्किटेक्चर के न्यूनतम निर्देश सेट का उपयोग करता है, या आप -march= निर्दिष्ट करते हैं और यह आपके द्वारा पूछे जाने वाले सीपीयू मॉडल की विशेषताओं का उपयोग करता है। तो -march= विकल्प लिखने का कोई तरीका नहीं है जो -march विकल्प को छोड़कर बराबर है।

शायद अगर आप बताते हैं कि इस सवाल पर हम क्या सवाल उठा सकते हैं।

8

मैं GCC mailing list कि डिफ़ॉल्ट प्रिंट -march और mtune मानकों के आधार पर इस मणि पाया:

$ echo | gcc -v -E - 2>&1 | grep cc1 
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.0/cc1 -E -quiet -v - -mtune=generic -march=x86-64 

मूल रूप से, आप stdin से एक खाली फ़ाइल संकलन कर रहे हैं और ऐसा करते समय, आप आदेशों को मुद्रित करें।

+0

यह इंगित करने के लिए समझ में आता है कि '-m32' और' -m64' का उपयोग 'gcc' आमंत्रण पर 32-बिट या 64-बिट (डिफ़ॉल्ट) लक्ष्य के लिए पूछने के लिए किया जा सकता है। – 0xC0000022L

8

आप दिए गए <type> के वर्तमान विकल्प मानों को सूचीबद्ध करने के लिए gcc -Q --help=<type> का उपयोग कर सकते हैं। इस प्रकार:

$ gcc -Q --help=target | grep march 
    -march=       x86-64 
$ gcc -m32 -Q --help=target | grep march 
    -march=       i686 
$ i686-w64-mingw32-gcc -Q --help=target | grep march 
    -march=       pentiumpro 

संपादित करें: असल में, इस विकल्प के रूप में आम तौर पर ऐसा लगता है के रूप में उपयोगी नहीं है क्योंकि लक्ष्य विशिष्ट चूक are not reflected in the output

संबंधित मुद्दे