2020-10-14 MinGW 相关

MinGW,即 Minimalist GNU For Windows。 为windows设计的极简GUN工具集合。提供了Win 版的 GCC。
但是MinGW 允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),
该库在所有的 NT OS 上有效,在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,
可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。
MinGW包含很多头文件和端口库的集合,所以通过这个集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。
除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。

MinGW的产物:windows程序。显然都是 PE 格式
目的:将linux代码通过MinGW编译生成windows程序。
      在Windows下开发Linux应用程序,线程模型选择的是:posix。
      开发Windows平台下的应用程序,就需要选择Win32
自我总结: MinGW是一个让linux程序员能够在windows下,以linux的编码方式完成gcc编译,并生成window程序的工具集合。同时也支持windows开发者在上面更轻巧快速的开发windows程序。
实现原理: 让 Window 下的编译器把诸如 fork 的调用翻译成等价的形式,这就是 MingW 的做法.MingW 有专门的 W32api 头文件,
来把代码中 Linux 方式的系统调用替换为对应的 Windows 方式.
https://blog.csdn.net/u010429831/article/details/106766165?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf
安装MinGW-w64
    version
        version选项:指的是你选择的GCC编译器的版本,我选择的是当前最新版本8.1.0,一般建议选择最新的版本。
        操作:选中 8.1.0即可。
    Architecture
        Architecture选项:指的是你的电脑的系统类型,i686表示的是32位的系统类型,x86_64表示的是64位的系统类型。
        我本人的电脑是64位的系统类型,所以选中x86_64。
    Threads
        Threads选项:指的是线程模型,posix/win32。
        说明:
        (1)POSIX(Portable Operating System Interface,可移植操作系统接口),它是UNIX系统的一个API设计标准,很多类UNIX系统也在支持兼容这个标准,如Linux操作系统。
        (2)Win32,它是Windows系统下一个API设计标准,如果你是开发Windows平台下的应用程序,就需要选择Win32。
        操作:本人是在Windows下开发Linux应用程序,所以选择的是:posix。
    Exception
        Exception选项:指的是异常处理模型。
        i686系统架构有2种选择:dwarf 和 sjlj。
        x86_64系统架构也有2种选择:seh 和 sjlj。由于我选择的是64位的系统架构,所以可供选择的异常处理模式是:seh 和 sjlj。
        下面说明sjlj, seh, dwarf三者的区别:
        在C++中有 try..throw..catch,当它执行这种结构时,它需要保存现场还原现场,而 sjlj, seh, dwarf 正是实现这类过程的三种方式。
        sjlj 全称是 SetJump / LongJump,前者设还原点,后者跳到还原点。可用于32位或者64位系统。
        seh (Structured Exception Handling,结构化异常处理) 是 Borland 公司的,微软买了其专利使用权,它利用了FS段寄存器,将还原点压入栈,收到异常时再弹出。
        相较而言,sjlj 是 C 标准库就有的东西,seh 在 2014 年前是有专利的,从性能上说 seh 比 sjlj 快。只用于64位系统。
        dwarf 只支持32位系统 – 没有永久的运行时间开销 – 需要整个调用堆栈被启用,这意味着exception不能被抛出,例如Windows系统DLL。
        因此,x86_64系统架构的推荐使用 seh 的异常处理模型。


配置MinGW-w64 开发环境
在电脑桌面,鼠标右击桌面图标【计算机】-->属性-->高级系统设置-->高级-->环境变量,有用户变量和系统变量。系统变量对所有用户有效,建议只在用户变量下进行配置。
我的mingw64软件安装的路径为: D:\Program Files\mingw64
1、新建变量: PATH,变量值为:D:\Program Files\mingw64\bin
2、新建变量:LIB,变量值为:D:\Program Files\mingw64\lib
3、新建变量:INCLUDE,变量值为:D:\Program Files\mingw64\include

<Tips> Windows下的环境变量名是不区分大小写的,这点跟Linux系统是有所不同的,一般而言,是建议环境变量名使用大写。
配置完成后,点击“确定”按钮,使其生效。按下Windows+X,点击命令提示符,输入:gcc -v,如果配置成功就会打印出gcc的配置和版本信息,如下图所示:

Thread model: posix
gcc version 8.2.0 (Rev1, Built by MSYS2 project)

至此,在Windows下安装配置MinGW-w64已经完成,在接下来的开发中我们就可以使用GCC编译器编译源文件了。其中,编译C源文件使用gcc命令,而编译C++源文件则使用g++命令。


GCC命令行参数
复习一下GCC命令行参数,看看各个版本的区别——
32位版:加上 -m32 参数,生成32位的代码。
64位版:加上 -m64 参数,生成64位的代码。
debug版:加上 -g 参数,生成调试信息。
release版:加上 -static 参数,进行静态链接,使程序不再依赖动态库。加上 -O3 参数,进行最快速度优化。加上-DNDEBUG参数,定义NDEBUG宏,屏蔽断言。

当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码,但某些编译器存在例外,例如——
32位Linux下的GCC,默认是编译为32位代码。
64位Linux下的GCC,默认是编译为64位代码。
Window系统下的MinGW,总是编译为32位代码。因为MinGW只支持32位代码。
Window系统下的MinGW-w64(例如安装了TDM-GCC,选择MinGW-w64),默认是编译为64位代码,包括在32位的Windows系统下。
MinGW分为较早开发的MinGW32和之后为编译64位程序开发的MinGW-w64,MinGW32只能编译32位的程序,而mingw64不仅能编译64位程序,也能编译32位程序,还能进行交叉编译,即在32位主机上编译64位程序,在64位主机上编译32位程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字正腔圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值