Windows安装mingw32/w64

news2024/12/22 17:56:58

1.下载

MinGW-w64

WinLibs - GCC+MinGW-w64 compiler for Windows

Releases · niXman/mingw-builds-binaries (github.com)

MinGW-w64、UCRT 和 MSVCRT 是 Windows 平台上常用的 C/C++ 运行库,它们有以下不同点:

  1. MinGW-w64:是一个基于 GCC 的编译器套件,可以用于编译 Windows 平台上的 C/C++ 程序。MinGW-w64 使用的是 POSIX 标准的运行库,因此可以很好地兼容 Unix/Linux 程序。MinGW-w64 的默认运行库是 MSVCRT(Microsoft Visual C++ Runtime),但也可以使用其他运行库。
  2. UCRT(Universal CRT):是微软提供的一个通用 C 运行库,可以用于编译 Windows 平台上的 C/C++ 程序。UCRT 提供了许多与标准 C 库兼容的函数,并支持新的 C11 和 C++11 标准。UCRT 适用于 Windows 10 或更高版本的操作系统。
  3. MSVCRT(Microsoft Visual C++ Runtime):是微软提供的一个 C++ 运行库,可以用于编译 Windows 平台上的 C/C++ 程序。MSVCRT 提供了许多与标准 C 库兼容的函数,但不支持新的 C11 和 C++11 标准。MSVCRT 在 Windows 操作系统中已经内置,并且随着 Visual Studio 版本的升级而不断更新。

2.配置环境变量

将 MinGW 的 bin 目录添加到系统的 PATH 环境变量中,这样可以在命令行中直接使用 MinGW 的工具。

3.验证版本

gcc 和 g++ 都是 GNU 工具链中的编译器,它们的主要区别在于它们所编译的代码的语言不同。

gcc 是 GNU C 编译器,它主要用于编译 C 语言程序,可以将 C 语言源代码编译成可执行文件或动态链接库。

g++ 则是 GNU C++ 编译器,它主要用于编译 C++ 语言程序,可以将 C++ 语言源代码编译成可执行文件或动态链接库。

虽然 gcc 和 g++ 是两个不同的编译器,但它们都基于同一套 GNU 工具链,并共享许多相同的功能和选项。因此,除了语言不同外,它们的使用方式和命令选项也非常相似。

需要注意的是,C++ 语言相对于 C 语言来说增加了一些特性,例如类、继承、多态等。如果您想编译 C++ 代码,建议使用 g++ 编译器,因为它可以更好地支持这些特性。而如果您只是编译 C 代码,gcc 编译器就足够了。

gcc -v
gdb -v
mingw32-make -v

注:要使用make,请把mingw32-make改成make

clang 和 gcc 是两个不同的 C/C++ 编译器,而 mingw-w64 是一个 Windows 上的编译和运行时环境。注意,mingw-w64 本身并不是一个编译器,而是一组库、头文件和实用工具。

gcc 需要 mingw-w64 环境才能在 Windows 上编译程序,加上最初(现已过时)的 mingw 项目就是专为 gcc 设计的,因此通常用 mingw64 代指 64 位的 gcc 和 mingw-w64 环境。

mingw64、ucrt64、clang64 都是 Windows 原生程序(不依赖 cygwin.dll),不过 mingw64 是很早就有的,后两者是最近(本回答最初写于2021年6月)才新加的,~~所以只是选一个用的话就 mingw64 就没问题。~~(划掉) 2022年11月25日更新:现在 msys2 官方推荐优先选择 ucrt64,经过一年多时间,现在 ucrt64 环境已经非常稳定了,而且对 UTF-8 语言环境的支持更好。

后两者先后刚出来时我还查过,简而言之,这三者的区别是:mingw64 与 ucrt64 都是用 gcc 编译器编译的 Windows 64 位程序,只不过它们链接到的 crt(C runtime)不同, mingw64 是链接到了 msvcrt ,而 ucrt64 则是链接到了 Windows 上新的 ucrt 上。

而 clang64 很好理解,就是用 clang 而非 gcc 来编译各种库。另外它也是链接到了 ucrt 而非 msvcrt。

三者是共同点是,它们都需要 mingw-w64 环境来进行编译。

以 zstd 为例:

( /usr/bin/zstd 就是依赖 cygwin 的非原生程序,这里的 msys-2.0.dll 实际上就是 msys2 版的 cygwin.dll )

如果你了解 archlinux 的打包的话(如果不了解可以在 archwiki 了解一下),也可以从这几个包的打包脚本(PKGBUILD)来观察区别。msys2 的打包脚本可以在 packages.msys2.org 在线查看。

在这个网站上搜索 zstd 得到这几个 zstd 包的构建脚本,发现这几个 Windows 原生的包其实是共用同一个构建脚本的。从 mingw_arch 变量来看,还有几个32位的包和 arm64 的包也是用这个打包脚本。只不过它会根据不同的 MINGW_PACKAGE_PREFIX 环境变量来执行不同的构建工具、构建出不同的包。

mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64')
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc"
             "${MINGW_PACKAGE_PREFIX}-ninja"
             "${MINGW_PACKAGE_PREFIX}-cmake")

这里是 msys2 最初关于添加 ucrt64 与 clang64 构建的讨论:issue 6901


changelog:

  • 2022-11-25:跟随上游建议,推荐优先使用 ucrt64
  • 2022-06-13:更改措辞,让表述更加准确
  • 2022-01-24:添加了 msys2 官方文档的链接
  • 2021-06-07 20:13:init

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Transformer,革命性的深度学习架构

Transformer 是一种革命性的深度学习架构,专门设计用于处理序列数据,特别是在自然语言处理(NLP)任务中表现卓越。它由 Vaswani 等人在 2017 年发表的论文《Attention is All You Need》中首次提出,打破了当时基于循环神经网络(RNN)和卷积神经网络(CNN)的序列建模常规,…

Golang | Leetcode Golang题解之第108题将有序数组转换为二叉搜索树

题目: 题解: func sortedArrayToBST(nums []int) *TreeNode {rand.Seed(time.Now().UnixNano())return helper(nums, 0, len(nums) - 1) }func helper(nums []int, left, right int) *TreeNode {if left > right {return nil}// 选择任意一个中间位置…

基于Vue的图片文件上传与压缩组件的设计与实现

摘要 随着前端技术的发展,系统开发的复杂度不断提升,传统开发方式将整个系统做成整块应用,导致修改和维护成本高昂。组件化开发作为一种解决方案,能够实现单独开发、单独维护,并能灵活组合组件,从而提升开…

Leetcode861. 翻转矩阵后的得分

Every day a Leetcode 题目来源:861. 翻转矩阵后的得分 解法1:贪心 对于二进制数来说,我们只要保证最高位是1,就可以保证这个数是最大的,因为移动操作会使得它取反,因此我们进行行变化的时候只需要考虑首…

【Android安全】AOSP版本对应编号| AOSP版本适配Pixel或Nexus型号 | 驱动脚本下载地址

AOSP版本对应编号 https://source.android.com/docs/setup/about/build-numbers?hlzh-cn#source-code-tags-and-builds 例如android-8.1.0_r1 对应的编号是OPM1.171019.011 可以适配Pixel 2 XL AOSP驱动脚本下载 编译AOSP时,需要Google的驱动,后面才…

C++——类与对象(下)

​ 【本节内容】 目录 1. 再谈构造函数 2. static成员 3. 友元 4. 内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 7. 再次理解类和对象 1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合…

HTML用法介绍

文章目录 一、HTML概念和模版二、常用标签及用法1.p标签2.span标签3.h标签4.hr标签5.img标签6.a标签7.input标签8.table标签 一、HTML概念和模版 HTML的全称为超文本标记语言&#xff0c;它包括一系列标签组成&#xff0c;模版及各部分注释如下&#xff1a; <!--声明文档类…

从需求角度介绍PasteSpider(K8S平替部署工具适合于任何开发语言)

你是否被K8S的强大而吸引&#xff0c;我相信一部分人是被那复杂的配置和各种专业知识而劝退&#xff0c;应该还有一部分人是因为K8S太吃资源而放手&#xff01; 这里介绍一款平替工具PasteSpider&#xff0c;PasteSpider是一款使用c#编写的linux容器部署工具(使用PasteSpider和…

如何将Windows PC变成Wi-Fi热点?这里提供详细步骤

序言 Windows 10和Windows 11都有内置功能,可以将你的笔记本电脑(或台式机)变成无线热点,允许其他设备连接到它并共享你的互联网连接。以下是操作指南。 由于Windows中隐藏的虚拟Wi-Fi适配器功能,你甚至可以在连接到另一个Wi-Fi网络或无线路由器时创建Wi-Fi热点,通过另…

CSS学习笔记之高级教程(二)

10、CSS 3D 转换 通过 CSS transform 属性&#xff0c;您可以使用以下 3D 转换方法&#xff1a; rotateX()rotateY()rotateZ() 10.1 rotateX() 方法&#xff08;使元素绕其 X 轴旋转给定角度&#xff09; <!DOCTYPE html> <html lang"en"><head&g…

NLP(17)--大模型发展(1)

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 大模型的演化&#xff1a; ElMO : 类似双向lstm 结果和词向量拼接 预训练鼻祖 GPT :使用了Transformer 模型 开始使用Token &#xff08;发现预训练的作用&#xff09; Bert&#xff1a;认为双向比单向好 MLM(双向) 优于 LT…

ARP基本原理

相关概念 ARP报文 ARP报文分为ARP请求报文和ARP应答报文&#xff0c;报文格式如图1所示。 图1 ARP报文格式 Ethernet Address of destination&#xff08;0–31&#xff09;和Ethernet Address of destination&#xff08;32–47&#xff09;分别表示Ethernet Address of dest…

Linux中解决普通用户使用不了sudo问题

目录 sudo的使用场景sudo使用不了的原因解决方法 sudo的使用场景 之前我们介绍了文件的权限问题 如果一个普通用户想去执行一个它命令之外的权限&#xff0c;只能使用sudo 比如普通用户使用yum去安装软件&#xff0c;需要sudo yum xxxx sudo使用不了的原因 这里我们用普通用户…

浏览器的下载行为基本原理

浏览器解析 在使用浏览器访问某些资源时&#xff0c;有些资源是直接下载有些资源是直接打开。例如前端的html&#xff0c;xml&#xff0c;css&#xff0c;图片等资源都是直接打开&#xff0c;而txt&#xff0c;excel等文件是直接下载。那么如何控制访问一个资源时是下载文件还…

C# run Node.js

C# run nodejs Inter-Process Communication&#xff0c;IPC Process类 启动Node.js进程&#xff0c;通过标准输入输出与其进行通信。 // n.js// 监听来自标准输入的消息 process.stdin.on(data, function (data) {// 收到消息后&#xff0c;在控制台输出并回复消息console.l…

MyBatisPlus标准分页功能制作,以及设置分页拦截器,selectPage(new Page<>(current,size),null)

目录 1、设置分页拦截器 2、创建数据库及表 3、pom.xml 4、添加MP的相关配置信息 application.yml 5、根据数据库表创建实体类 User 6、创建 UserDao 接口 7、编写引导类 8、编写测试类 9、Run的运行结果 1、设置分页拦截器 package com.example.config; import com.baomidou.m…

从零开始傅里叶变换

从零开始傅里叶变换 1 Overview2 傅里叶级数2.1 基向量2.2 三角函数系表示 f ( t ) f(t) f(t)2.2.1 三角函数系的正交性2.2.2 三角函数系的系数 2.3 复指数函数系表示 f ( t ) f(t) f(t)2.3.1 复指数函数系的系数2.3.2 复指数函数系的正交性 2.4 傅里叶级数总结 3 傅里叶变换…

基于轻量级神经网络GhostNet开发构建CIFAR100数据集场景下的图像识别分析系统,对比不同分辨路尺度下模型的性能情况

Cifar100数据集是一个经典的图像分类数据集&#xff0c;常用于计算机视觉领域的研究和算法测试。以下是关于Cifar100数据集的详细介绍&#xff1a; 数据集构成&#xff1a;Cifar100数据集包含60000张训练图像和10000张测试图像。其中&#xff0c;训练图像分为100个类别&#x…

肯尼亚大坝决堤反思:强化大坝安全监测的必要性

一、背景介绍 近日&#xff0c;肯尼亚发生了一起严重的大坝决堤事件。当地时间4月29日&#xff0c;肯尼亚内罗毕以北的一座大坝决堤&#xff0c;冲毁房屋和车辆。当地官员称&#xff0c;事故遇难人数已升至71人。这起事件再次提醒我们&#xff0c;大坝安全无小事&#xff0c;监…

SpringMVC源码解读[1] -Spring MVC 环境搭建

源码地址: https://github.com/chen-jiacheng/springmvc-quickstart 一、使用 IDEA 创建 Spring MVC 项目 直接创建项目即可 默认项目结构: springmvc-quickstart ├── pom.xml └── src├── main│ ├── java│ │ └── com│ │ └── chenjiache…