如何获取当前体系结构的默认参数-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