🏖️windows 安装gcc cmake 工具链过程
2024-3-18
| 2024-4-10
0  |  0 分钟
type
status
date
Mar 18, 2024 03:19 AM
slug
summary
tags
category
icon
password
引言(问题现象对标题的补充):
用cygwin64 下gcc build fopen_s 函数报错 `cygwin undefined reference to "`fopen_s'”`
后面发现用微软建议的 MSYS2 顺利解决.
 
对比gcc 版本发现差了两个大版本.maybe是这个原因导致的?
 
 

配置MSYS2

安装软件 pacman -S
安装make组件
pacman -S mingw-w64-x86_64-make
安装cmake组件
pacman -S mingw-w64-x86_64-cmake
在vscode 终端中配置如下code后, 顺便设置为default.

vscode 中.vscode 三文件配置

 
 

msys2 安装gcc, 用pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain 和 pacman -S gcc` 有什么差异

MSYS2 是一个独立的 Unix 风格的环境和命令行界面,为 Windows 提供了一个包管理系统(pacman)和构建环境。在 MSYS2 中安装 GCC(GNU Compiler Collection)有多种方式,主要取决于你想要使用的目标环境和工具链。你提到的两个命令有以下区别:
  1. 使用命令 pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
      • base-devel:这是一组基础的开发工具,包括 make、autoconf、automake 等,这些都是编译大多数源代码所必需的。
      • mingw-w64-ucrt-x86_64-toolchain:这个包组包括了 MinGW-w64 项目为 x86_64 架构提供的工具链,使用 UCRT(Universal C Runtime)作为 C 运行时。工具链包括 GCC、GDB、binutils 等。
      这条命令会安装一套完整的开发环境,包括 GCC 和其他编译和构建软件项目所需的工具。这个命令更倾向于为特定的架构(x86_64)和 C 运行时(UCRT)安装一个专门的工具链。
  1. 使用命令 pacman -S gcc
      • 这个命令会安装 MSYS2 的 GCC 包。这通常是为了在 MSYS2 的环境下编译软件,而不特定于任何 Windows 架构。
      • 这里安装的 GCC 版本是为了在 MSYS2 环境下使用,主要用于编译那些需要 MSYS2 环境的项目,而不是直接为 Windows 应用编译代码。
总结
  • 如果你的目的是为 Windows 应用开发,特别是希望生成兼容 Windows 的二进制文件(无论是 32 位还是 64 位),使用 pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain 命令更为合适。这为你提供了一个完整的、针对 Windows 应用开发的工具链。
  • 如果你只是需要一个 GCC 编译器来编译一些需要在 MSYS2 环境下运行的程序,那么使用 pacman -S gcc 就足够了。这通常用于开发或测试那些依赖于 MSYS2 特定环境的项目。
 
 
当你通过不同的命令在 MSYS2 中安装 GCC 时,可能会获得不同版本的 GCC,主要原因在于 MSYS2 包管理系统将 GCC 编译器分为了几个不同的环境和目标平台。具体来说,MSYS2 提供了三个主要的子系统:
  1. MSYS2:这是一个提供类 Unix 环境的子系统,主要用于提供那些需要 POSIX 兼容性的工具和库。当你仅仅安装 gcc 包时,你安装的是 MSYS2 子系统下的 GCC 版本,这个版本的 GCC 主要用于编译那些需要 MSYS2 POSIX 兼容层的程序。
  1. MinGW-w64:这个子系统提供了为 Windows 应用编译代码的工具链,包括 GCC。它有两个变种:一个是针对 32 位 Windows 的 mingw-w64-i686,另一个是针对 64 位 Windows 的 mingw-w64-x86_64。通过安装 mingw-w64-x86_64-gcc(作为 mingw-w64-ucrt-x86_64-toolchain 包组的一部分),你实际上安装的是为 Windows 64 位平台优化的 GCC 版本。
为什么版本不同?
  • 不同的目标:MSYS2 的 GCC 与 MinGW-w64 的 GCC 针对的编译目标不同。MSYS2 的 GCC 版本主要用于编译需要 MSYS2 环境的程序,而 MinGW-w64 的 GCC 版本则专注于为 Windows 应用生成可执行文件。
  • 独立更新和维护:这些 GCC 版本由不同的团队在 MSYS2 项目中独立更新和维护。这意味着更新可能会在不同的时间发布,导致可用的 GCC 版本之间存在差异。
  • 不同的构建配置和选项:为了适应它们的目标环境,这两个版本的 GCC 可能会使用不同的构建配置和编译选项。这也可能影响到它们支持的功能和默认的行为方式。
因此,根据你选择的安装命令和目标平台,MSYS2 中的 GCC 版本可能会有所不同。选择哪一个取决于你的具体需求,比如你是需要为 Windows 应用编译代码,还是需要在 MSYS2 环境下工作。
 
 
mingw-w64-x86_64-gccgcc 在 MSYS2 环境中指代两种不同的 GCC 编译器,它们的主要区别在于目标平台和用途:

mingw-w64-x86_64-gcc

  • 目标平台mingw-w64-x86_64-gcc 是为了在 Windows 系统上编译原生 Windows 应用而设计的。它是 MinGW-w64 项目的一部分,目标是生成与 Windows x86_64 (64位) 架构兼容的可执行文件和库。
  • 用途:使用这个版本的 GCC,开发者可以编译出不依赖于 MSYS2 环境的 Windows 应用程序。这意味着编译出的应用可以在没有安装 MSYS2 的任何 Windows 系统上运行。
  • C 库:它使用 Microsoft 的 C 运行时库 (CRT) 和 Windows API,而不是 POSIX 风格的库。这使得使用 mingw-w64-x86_64-gcc 编译的程序可以直接利用 Windows 的本地接口和服务。
  • 安装:在 MSYS2 中通过 pacman -S mingw-w64-x86_64-gcc 命令安装。

gcc

  • 目标平台:当仅提到 gcc 时,通常指的是安装在 MSYS2 的 POSIX 兼容层上的 GCC 版本。这个版本的 GCC 主要用于编译需要 MSYS2 环境(即 POSIX 兼容性)的程序。
  • 用途:这个版本的 GCC 适用于开发那些依赖于 POSIX 标准的程序,通常是为了在 MSYS2 环境下工作或者交叉编译为其他 Unix-like 系统。
  • C 库:它依赖于 MSYS2 提供的库,这些库实现了许多 POSIX API,因此使用这个版本的 GCC 编译的程序需要在 MSYS2 环境中运行。
  • 安装:在 MSYS2 中通过 pacman -S gcc 命令安装。
总结
  • mingw-w64-x86_64-gcc 主要用于编译原生 Windows 应用程序,无需 MSYS2 环境即可在 Windows 上运行。
  • gcc(在 MSYS2 环境中)主要用于编译依赖于 POSIX 接口的应用程序,适用于需要 MSYS2 环境的场景或者开发 Unix-like 系统的软件。
选择哪个版本的 GCC 取决于你的具体需求和目标平台。

参考

 
 
技术折腾
  • WIN
  • 折腾
  • 开发
  • 用beagle测量iic信号解决 win 无故自动唤醒问题.
    目录