Gcc 有没有办法找到构建mingw的开关?
有没有一种方法可以找到一个特定的gcc构建,它是用哪个交换机构建的?Gcc 有没有办法找到构建mingw的开关?,gcc,mingw,Gcc,Mingw,有没有一种方法可以找到一个特定的gcc构建,它是用哪个交换机构建的? 我听说,在用其源代码构建gcc构建时,有两个开关可确定某些特定功能是否可用,例如Thread\u posix和/或Win32\u Thread开关用于在Windows上构建MingW,第一个允许使用std::thread,另一个不允许,或者sjljbuild与dwarfbuilds相比,后者处理异常(我甚至不知道它们的用途!我只知道sjljbuild在所有情况下都要慢15%! 那么,我还能做些什么来了解这些,以及这方面的更多信
我听说,在用其源代码构建gcc构建时,有两个开关可确定某些特定功能是否可用,例如
Thread\u posix
和/或Win32\u Thread
开关用于在Windows
上构建MingW
,第一个允许使用std::thread,另一个不允许,或者sjlj
build与dwarf
builds相比,后者处理异常(我甚至不知道它们的用途!我只知道sjlj
build在所有情况下都要慢15%!那么,我还能做些什么来了解这些,以及这方面的更多信息呢 是的。
gcc-v
的输出显示了您想要知道的所有内容
例外情况如下:
- dwarf:
--启用-dw2-异常
- sjlj:
或不启用——为4.8 64位之前的MinGW-w64 GCC启用sjlj异常
- seh:
或不启用--为GCC 4.8+64位MinGW-w64 GCC启用seh异常
sjlj
、dw2
或seh
libgcc中使用的线程实现:
- win32:默认值,可选
--启用线程=win32
- posix:
--启用线程=posix
据我所知,这些不能从文件名中推断出来。在Windows上,使用最新的GCC版本(4.8版后),情况如下:
dwarf/sjlj/seh
:
- win32目标版本
- 对于
dwarf2
——应指定with-F2
- 对于
sjlj
--应指定启用sjlj异常
——如果要强制禁用
异常处理,也可以使用禁用sjlj执行选项sjlj
seh
- 不需要指定任何内容。这是未使用
时的默认值sjlj
sjlj
--应指定启用sjlj异常
——如果要强制禁用
异常处理,也可以使用禁用sjlj执行选项sjlj
- 注意:如果未向配置脚本传递异常处理参数,则
上的默认值为win64
异常seh
- 应指定启用线程=win32
- 注意:
是默认的线程模型,前提是没有向配置脚本传递与线程相关的参数win32
posix
- 应指定启用线程=posix
--enable shared
文件夹将bin
作为DLLlibgcc
DLL将有一个前缀,指示正在使用的异常处理模型,该模型将是libgcc
dw2/seh/sjlj
--disable shared
构建的,那么它会变得更加复杂,您可以使用以下方法之一:
strings
和grep
命令的组合,从静态libgcc中找出它。a
将在/lib/gcc///libgcc.a
中提供,这次它不会有异常处理模型前缀
输出将包括以下内容之一:strings/lib/gcc///libgcc.a | grep personality
:sjlj
\uugcc\u personality\usj0
:dwarf2
\ugcc\uv0
:seh
\uugcc\useh0
:sjlj
使用异常定义
:seh
定义
:dwarf2
(对这个不太确定)#定义uuu GCC_u拥有u dwarf2\ucfi_asm1
谢谢,当我尝试运行gcc-v时,我遇到了“程序太大,无法放入内存”的错误!我该怎么办?它应该像这样打印。我想你们的工具链()会在我的系统上打印出来。谢谢,我重新启动了我的系统,再试了一次,效果很好:)你们怎么知道这些东西?!欢迎来到Stackoverflow.com,那里(几乎)总是有人知道你想知道什么<代码>;-)代码>在我的例子中,我构建了MinGW-w64工具链(binutils+GCC+gdb和Clang),所以我解决了这一切。再次感谢您的帮助;)