MinGW与Cygwin的学习和理解

笔者来聊聊MinGW的学习和理解

1、MinGW认识

MinGW:Minimalist GNU for Windows,GNU项目的for windows的迷你版。

MinGW是针对windows,对GNU 编译器进行的原生的移植,为了构建windows可移植程序,导入了相关的库和头文件,包括支持C99的MSVC的运行库,所有的MinGW软件都可以运行在windows的平台上。
在这里插入图片描述

MinGW是一个完全开源的编程工具,其适用于MS-Windows的程序开发,不依赖与第三方的第三方运行库,但是其确实依赖于微软的一些操作系统的DLL,一些DLL是相当稳定的,比如 MSCRT这个C运行库。

MinGW提供了链接微软C运行库以及其他特定语言的运行库的可能,但是MinGW,本身是最小的的一个运行环境集合,但是不是一个可以完整提供一个POSIX运行环境的集合,如果想在运行一个POSIX程序,可以考虑cygwin(后面介绍)。

MinGW主要就是为了那些在原生的MS-Windows开发的人员,但是想用使用GNU工具的开发者们,其主要包括:

  • 一套GNU编译器的移植,包括C/C++/ADA/Fortan
  • windows上面运行的GNU BinUtils,GNU的bin使用工具
  • 在windows上面,命令行的安装和使用,
  • GNU界面的安装工具,for MinGW
  • 基于MinGW,开发了很多交叉编译环境,比如在GNU/Linux平台开发,部署在windows环境。

2、MinGW以及MinGW-64

MinGW的两个版本,前者已经停止更新,后者目前一直更新。MinGW一直以来都有两个版本,多线程模型有两种,

  • win32 thread model
  • posix thread model
    在这里插入图片描述
    但是上述模型只是底层实现或者链接不同,并不影响用户上面的使用,pthread和win32的Creathread均可以使用。

2.1、MinGW(32)

  • 使用MinGW GUI get Set up tool工具去安装,然后包管理器里面选择需要安装的工具链,
  • msys工具链也可以在这里安装,
  • 安装完成之后,需要设置环境变量,MinGw/bin 目录以及MinGW/msys/1.0/bin,前者是gcc的环境,后者是msys的环境,提供一些类linux的工具,
  • 需要添加HOME的环境变量,Unix下面定义了这个,是用户的工作目录,所以这边也需要定义,set HOME=%USERPROFILE %,windows下面USERPROFILE 是用户的目录。
    在这里插入图片描述
  • 如果不添加环境变量,可以使用快捷方式,命令设置环境变量,
    set HOME=%USERPROFILE%
    path %PATH%;C:\MinGW\bin
    %comspec%
  • msys可以通过msys/1.0目录下面的bat文件启动,需要注意的是,需要再etc/fstab文件设置MinGW的路径,这样就可以使用msys的环境,所以上面也可以不用设置msys的环境变量,通过mout 挂载就可以知道。
    在这里插入图片描述
  • MinGW只能编译32位程序(实际更新速度很慢,gcc编译器版本也停在了4.8),所以大家后面就开始转向64位,即MinGW-64,支持32位和64位程序,默认是64位,而且支持windows的API更好,
  • 下面是MinGW的一些环境目录说明。
    在这里插入图片描述
/* 在window下可以输入如下命令:*/
gcc -posix -E -dM - < nul
/* linux下,命令稍有不同 */
gcc -posix -E -dM - < /dev/null
/* windows平台相关的:当然是在windows平台 */
#define _WIN32 1
#define __WIN32 1
#define __WIN32__ 1
#define WIN32 1/* GNU相关的:*/
#define __GNUC__ 6
#define __GNUC_STDC_INLINE__ 1
#define __GNUC_MINOR__ 3/*x86 x64架构相关的*/
#define __i586 1
#define __i386 1
#define __i586__ 1
#define __i386__ 1
#define i386 1
#define _X86_ 1

2.3 MinGW-64

简单来说就是支持64位的windows程序编译运行,默认生成64位的程序,通过参数可以指定生成其他位数的程序
在这里插入图片描述
MinGW-64的宏主要有以下:

/* windows平台相关的:当然是在windows平台 */
#define _WIN64 1
#define __WIN64 1
#define __WIN32__ 1
#define _WIN32 1
#define WIN32 1
#define WIN64 1
#define __WIN32 1
#define __WIN64__ 1/* GNU相关的:*/
#define __GNUC__ 12
#define __GNUC_STDC_INLINE__ 1
#define __GNUC_MINOR__ 2/*x86 x64架构相关的*/
#define __amd64 1
#define __x86_64 1

多说一句,如果是linux平台,x86架构指令,gcc宏有如下:

/*linux x86架构平台*/
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1#define __x86_64 1
#define __x86_64__ 1#define __GNUC__ 8
#define __GNUC_RH_RELEASE__ 5
#define __GNUC_STDC_INLINE__ 1
#define __GNUC_MINOR__ 3

如果是linux平台,arm架构指令,gcc宏有如下:

/*linux arm架构平台*/#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1#define __arm__ 1
#define __ARM_FEATURE_SAT 1
#define __ARM_ARCH_ISA_ARM 1
#define __ARMEL__ 1
#define __ARM_ARCH_6__ 1
#define __ARM_ARCH_ISA_THUMB 1
#define __ARM_ARCH 6
#define __ARM_FEATURE_COPROC 15
#define __ARM_EABI__ 1#define __GNUC__ 8
#define __GNUC_STDC_INLINE__ 1
#define __GNUC_MINOR__ 3

3、Msys以及Msys2

Msys,Minimal System,一个Bourne shell解释器,提供了一个替代微软cmd的选择,一个通用的命令行环境,特别用来适用于MinGW,适用于移植很多开源的程序到MS-Winwos平台上面

其是对于cygwin的轻量级的一个fork,其包括了一部分unix的工具,比如ls/rm/cp/cat/vim等。

在这里插入图片描述
mys2:第二代msys,

4、Cygwin的认识

在这里插入图片描述

5、参考文档

1、Cygwin 和MinGW 的区别与联系是怎样的?
2、ChatGPT
3、linux/windows下获取gcc(mingw)编译器预定义宏的方式
4、POSIX线程与Win32线程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32018.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写作社区平台汇总(自媒体运营的素材来源和推文发送地)

文章目录 引言I 技术社区II 其他写作社区see also引言 所谓平台,不是只有大众知道的大平台,还有行业中热门的网站或APP。 必须具备的平台有知乎、百家号 、今日头条、抖音、快手、 大鱼号、 网易号、 搜狐号、 新浪号、 企鹅媒体、 东方号、 趣头条、 搜狗媒体、 360自媒体平…

微头条自媒体常见领域,好创作,快速实现自媒体变现

有些人认为&#xff0c;不写狗血不吐槽就没有流量。事实上&#xff0c;这是偏见。头条用户基数很大&#xff0c;任何形式的创作&#xff0c;都有大量有兴趣的读者。所以我们应该创作自己擅长的内容&#xff0c;并坚守自己的立场&#xff0c;接下来我们一起了解一下比较常见的微…

自媒体一键多平台分发工具,自媒体人必备

在谈到怎么运营自己的自媒体账号时&#xff0c;很多自媒体人觉得比较困难&#xff0c;因为他们要花费大量的时间与精力去经营&#xff0c;在不止一家自媒体平台拥有自己的账号是一件麻烦的事情&#xff0c;光是每个平台发布就需要很长的时间。于是我像他们推荐了我正在使用的融…

自媒体适合多平台发布,30+自媒体平台都可以一键发布!

现在越来越多的自媒体人员&#xff0c;为了获得全网曝光&#xff0c;都会注册开通10多个新媒体平台&#xff0c;如果你只分发图文&#xff0c;10个平台发完怎么的也得30分钟。如果你只分发视频&#xff0c;20个平台保底3小时&#xff0c;同时还得是都群发成功了&#xff0c;在达…

最靠谱的6个自媒体平台,也可以快速上手

现在自媒体发展已是相对成熟的阶段&#xff0c;很多朋友还想做自媒体&#xff0c;很明确地告诉你还不晚&#xff0c;只要你有创意&#xff0c;有出色的审美&#xff0c;什么时候都还不算晚&#xff0c;那么要选什么平台比较好了&#xff0c;小编给大家介绍比较好上手的自媒体平…

如何快速有效地运营自己的社交媒体账号?

在众多的社交媒体平台中&#xff0c;您可以先选择一个平台开始运营&#xff0c;如Facebook、Twitter、领英、 Instagram等。不同的平台有不同的特点&#xff0c;所以最好在选择之前了解好不同社交媒体的特点&#xff0c;以便 更好地展示自己的特点。 例如&#xff0c;领英在商…

怎么注册自媒体账号?技巧分享

自媒体行业的快速发展&#xff0c;相信大家都有耳闻&#xff0c;至于自媒体应该如何有效地运营&#xff0c;相信大家就纷纷摸不着头脑了那么新手如何做自媒体呢&#xff1f;我归纳分为这几个步骤&#xff1a; 一、自媒体账号定位 在做自媒体之前&#xff0c;一定需要做好定位&…

自媒体账号如何注册申请

如何利用自媒体挣取到人生第一桶金&#xff0c;建议大家可以从以下几个方面入手。 一、申请自媒体账号 申请自媒体账号需要的材料&#xff1a;身份证&#xff0c;手机号&#xff0c;辅助材料&#xff1a;微信公众号或者博客写过文章的都可以。如果实在不会弄就去买一个账号先练…

【云原生】基本概念梳理:容器、镜像、仓库和集群

有条件的同学尽可能都开始使用 ChatGPT、new bing 和 GPT-4&#xff0c;这些是新的生产力工具。 它们或许不能替代某个岗位&#xff0c;但做个不恰当的比方&#xff0c;没有它们时的学习效率是坐马车&#xff0c;使用这些工具的学习效率是开汽车。 一、引言 1.1 先问问 ChatGP…

vsCode编辑器 快速国际化-以及一些国际化细节

i18n.code-snippets 配置 {"vue-i18n-mall": {"scope": "vue-html","prefix": "vt","body": "\\$t(passenger.$1)", //passenger-国际化文档名"description": "vue i18n mall"}…

消息队列之 RabbitMQ基本流程

介绍 关于消息队列&#xff0c;从前年开始断断续续看了些资料&#xff0c;想写很久了&#xff0c;但一直没腾出空&#xff0c;近来分别碰到几个朋友聊这块的技术选型&#xff0c;是时候把这块的知识整理记录一下了。 市面上的消息队列产品有很多&#xff0c;比如老牌的 Activ…

出现IllegalArgumentException:Could not resolve placeholder ‘xxx‘ in value “${xxxx}“ 的问题

在写一个SSM框架的整合项目时,出现了 Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder data.username in value "${data.username}"错误. 在查阅了很多资料,结果是自己的一个配置xml文件导致的: 引入了一个外部文件db.properties,需要…

后台返回数据中有换行符,但是在文本中不显示换行效果

之前在标签里面是这样写的 &#xff08;vue项目&#xff09; <div class"text">{{trainDetail.trainingContent}}</div>返回的后台数据是这样的 是含有换行符的 后面发现用v-htm就可以解决 <div class"text" v-html"trainDetail.trai…

Notepad++支持显示回车符,换行符,TAB键,行首,行尾等特殊字符

Notepad默认&#xff0c;也和其他编辑器一样&#xff0c;是不显示空格和TAB键的 &#xff0c;不过我最近在用Notepad写Python脚本过程中&#xff0c;常需要显示空格键和TAB键 以避免两者混合缩进&#xff0c;所以去设置了&#xff0c;将空格键和TAB键也显示出来。 下面以某H…

chatgpt赋能python:如何在Python中让print不换行

如何在Python中让print不换行 在Python编程中&#xff0c;print语句是一个非常常见和有用的功能。然而&#xff0c;有时候我们需要在一行中连续打印多个输出&#xff0c;但是默认情况下&#xff0c;print语句会自动换行&#xff0c;这就会导致输出不太理想。在这篇文章中&…

chatgpt赋能python:怎么一行输入不换行Python

怎么一行输入不换行Python Python是一种易学易用的编程语言&#xff0c;它广泛应用于Web开发、数据分析、机器学习等领域。在Python编程中&#xff0c;经常需要将多个语句写在一行&#xff0c;但是默认情况下&#xff0c;每写完一条语句&#xff0c;Python都会自动换行。这时候…

chatgpt赋能python:如何让Python输出内容不自动换行

如何让Python输出内容不自动换行 Python作为一种高级编程语言&#xff0c;使得许多开发人员乐于使用它来编写代码。然而&#xff0c;有时Python的自动换行功能会对开发人员造成困扰。在编写Python脚本时&#xff0c;输出的内容可能会被换行符分割成多个行&#xff0c;并最终导…

chatgpt赋能python:如何让Python输出结果不换行?

如何让Python输出结果不换行&#xff1f; Python是一门高级编程语言&#xff0c;它是开发应用程序的首选语言之一。当使用Python编写应用程序时&#xff0c;我们经常需要输出一些内容到控制台。但是&#xff0c;Python默认情况下&#xff0c;每输出一行内容都会自动换行&#…

返回数据中的换行符,标签内不显示换行问题

&#xff08;接口返回数据-已返回换行符&#xff09;&#xff1a; IE返回数据&#xff1a; chorme返回数据&#xff1a; 页面显示&#xff08;不是textarea&#xff0c;是div&#xff09;&#xff08;IE Chrome&#xff09;&#xff1a; 问题&#xff1a;换行符已返回&#x…

PlotNeuralNet + ChatGPT创建专业的神经网络的可视化图形

PlotNeuralNet&#xff1a;可以创建任何神经网络的可视化图表&#xff0c;并且这个LaTeX包有Python接口&#xff0c;我们可以方便的调用。 但是他的最大问题是需要我们手动的编写网络的结构&#xff0c;这是一个很麻烦的事情&#xff0c;这时 ChatGPT 就出来了&#xff0c;它可…