如何獲取當前體系結構的默認參數-march
(如果我不提供)?獲取當前的GCC體系結構
回答
gcc -dumpmachine
爲您提供目標三元組,例如x86_64-unknown-linux-gnu
如果gcc -v
顯示GCC用--with-arch
選項配置(或--with-arch-32
和/或--with-arch-64
),那麼這會是怎樣的默認值。
沒有--with-arch
選項(如果沒有使用自定義規格文件),那麼使用的拱將是目標的默認值。
對於x86,直至幷包括GCC 4.4,對於32位的缺省是-march=i386
和64位爲-march=x86-64
(注意連字符代替下劃線。)
對於x86與GCC 4.5和更高版本從目標三元組推斷默認拱,即配置爲i586-pc-linux-gnu
表示默認值爲-march=i586
,配置爲core2-pc-linux-gnu
表示默認值爲-march=core2
。
一些其他平臺還可以從目標三元組中推斷出默認的拱形(從GCC 4.4開始就已經完成),例如, ultrasparc2-sun-solaris2.10
意味着-march=ultrasparc2
。
'gcc -dumpmachine'選項非常完美。另一個關於如何在stackoverflow上進行兩秒搜索的例子可以避免再次讀取gcc手冊頁! – 2013-02-07 11:14:34
我已閱讀手冊,並享受它。我的意思是,你可以用更多的人類搜索術語搜索stackoverflow而不是通過手冊頁。例如,我之前使用過'gcc -dumpmachine',但不記得參數名稱。不過,我無法在man頁面中輕鬆搜索正確的參數。也許我應該改變「避免另一次閱讀」,「避免再次搜索」;) – 2013-02-07 17:33:21
啊,是的,夠公平的,這確實比記住手冊中搜索的確切術語容易,因爲如果你能記住它,不需要查看它! – 2013-02-07 18:16:13
運行命令
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:
行是你想要的。你應該能夠從中推斷出足夠的信息。
「-march」可以使用「x86_64-unknown-linux-gnu」的哪部分內容? – 2012-07-30 23:15:50
第一部分:'x86_64'。但這是一個普遍的問題。完整列表可以在GCC手冊中找到:https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/x86-Options.html#x86-Options。 – rubenvb 2015-06-21 15:20:22
我認爲答案是沒有任何等價的。要麼你沒有指定-march=
,並且編譯器使用該體系結構的最小指令集,或者指定了-march=
,並且它使用您要求的任何cpu模型的功能。所以沒有辦法編寫一個-march=
選項,相當於省略了-march
選項。
也許,如果你解釋了什麼動機的問題,我們可以改善這個答案。
我發現,打印默認-march
和mtune
參數GCC mailing list這個寶石:
$ 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
基本上,你正在編譯從標準輸入一個空白文件,而這樣做,你打印的命令。
有意義的是指出''m32'和'-m64'可用於'gcc'調用以請求32位或64位(默認)目標。 – 0xC0000022L 2017-08-09 12:57:07
您可以使用gcc -Q --help=<type>
列出給定<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。
- 1. GCC i386體系結構上
- 2. 檢索RPM的當前體系結構
- 3. 前端的MVC體系結構
- 4. SOS不支持當前目標體系結構
- 5. Python類,數據結構和適當的體系結構
- 6. 特定體系結構的默認GCC優化選項
- 7. ARM體系結構中調用函數的GCC返回地址
- 8. 如何確定我在GCC中編譯的體系結構?
- 9. gcc,不同體系結構上long int的寬度
- 10. MVC體系結構
- 11. Elasticsearch體系結構
- 12. Graphql體系結構
- 13. Firebug體系結構
- 14. Rails體系結構?
- 15. 獲取Windows映像中特定體系結構的索引號
- 16. 如何獲取gradle中當前選擇的構建變體?
- 17. ICC vs GCC - 優化和CPU體系結構
- 18. Selenium RC體系結構和Selenium WebDriver體系結構差異
- 19. 三層體系結構與三層服務器體系結構
- 20. Akka:獲取有關當前演員層次結構的信息
- 21. 獲取表結構當前元素的行號
- 22. 獲取NSTextView的當前字體
- 23. 構建可伸縮前端體系結構的任何資源?
- 24. Web層的體系結構
- 25. chatroulette的體系結構
- 26. async/await的體系結構
- 27. Apigility的體系結構
- 28. AutoMapper的體系結構?
- 29. Java的OpenID體系結構
- 30. VHDL結構體系結構和clk'event
'gcc -v'是否提供足夠的信息? – Jens 2012-07-30 19:27:42