Minimalist GNU for Windows

Minimalist GNU for Windows

文章目录

    • [Minimalist GNU for Windows](#Minimalist GNU for Windows)
      • [一、MinGW 和 MinGW-w64 的安装](#一、MinGW 和 MinGW-w64 的安装)
        • [1. 在 Windows 上安装 MinGW-w64](#1. 在 Windows 上安装 MinGW-w64)
        • [2. 在 macOS 和 Linux 上安装 MinGW-w64](#2. 在 macOS 和 Linux 上安装 MinGW-w64)
      • [二、使用 MinGW-w64 编译代码](#二、使用 MinGW-w64 编译代码)
      • [三、MinGW 编译选项](#三、MinGW 编译选项)
      • [四、MinGW-w64 常用命令](#四、MinGW-w64 常用命令)
      • [五、MinGW 开发示例](#五、MinGW 开发示例)
      • 六、调试与优化
      • [七、 卸载 MinGW](#七、 卸载 MinGW)
        • 1、windows卸载
          • [1.1 使用 MinGW Installation Manager 卸载](#1.1 使用 MinGW Installation Manager 卸载)
          • [1.2 手动删除 MinGW 文件夹](#1.2 手动删除 MinGW 文件夹)
        • [2. 在 MSYS2 上卸载 MinGW-w64](#2. 在 MSYS2 上卸载 MinGW-w64)
        • [3. 在 macOS 或 Linux 上卸载 MinGW-w64](#3. 在 macOS 或 Linux 上卸载 MinGW-w64)
          • [3.1 使用 Homebrew 卸载(macOS)](#3.1 使用 Homebrew 卸载(macOS))
          • [3.2 手动卸载(Linux)](#3.2 手动卸载(Linux))
        • [4. 检查是否已成功卸载](#4. 检查是否已成功卸载)
      • 七、资源

MinGW(Minimalist GNU for Windows)是一组 GNU 工具,专门用于在 Windows 平台上编译 C、C++ 和 Fortran 等语言的代码。它提供了一个 Windows 版的 gcc 编译器,使开发者可以在 Windows 上使用 GNU 工具链进行开发。 mingw-w64 是 MinGW 的扩展版,支持 64 位系统并提供更多功能。

一、MinGW 和 MinGW-w64 的安装

1. 在 Windows 上安装 MinGW-w64
  1. 通过 MSYS2 安装 MinGW-w64

    • 下载 MSYS2,安装并运行。

    • 运行以下命令更新 MSYS2:

      bash 复制代码
      pacman -Syu
    • 关闭并重启 MSYS2 终端,然后运行:

      bash 复制代码
      pacman -Syu
    • 安装 mingw-w64 编译器:

      bash 复制代码
      pacman -S mingw-w64-x86_64-gcc   # 64位
      pacman -S mingw-w64-i686-gcc     # 32位
    • 配置环境变量,使编译器可以在任意路径下使用。

  2. 通过 MinGW-w64 Installer 安装

    • 从 MinGW-w64 下载页面 下载安装程序。
    • 选择适合的架构(32 位或 64 位)、编译器版本等进行安装。
    • 添加安装路径到环境变量 PATH。
2. 在 macOS 和 Linux 上安装 MinGW-w64

mingw-w64 也可以在 macOS 和 Linux 上安装,用于交叉编译 Windows 可执行文件。

  • macOS:

    bash 复制代码
    brew install mingw-w64
  • Linux(以 Debian/Ubuntu 为例):

    bash 复制代码
    sudo apt update
    sudo apt install mingw-w64

二、使用 MinGW-w64 编译代码

  1. 编译简单的 C/C++ 程序

    创建一个 hello.c 文件:

    c 复制代码
    #include <stdio.h>
    
    int main() {
        printf("Hello, MinGW!\n");
        return 0;
    }

    使用 MinGW 编译:

    bash 复制代码
    x86_64-w64-mingw32-gcc hello.c -o hello.exe

    生成的 hello.exe 文件可以在 Windows 上直接运行。

  2. 编译为 32 位或 64 位可执行文件

    • 使用 x86_64-w64-mingw32-gcc 编译 64 位程序。
    • 使用 i686-w64-mingw32-gcc 编译 32 位程序。
  3. 跨平台编译

    使用 mingw-w64 进行跨平台开发时,可以在 Linux 或 macOS 上生成 Windows 可执行文件。以下是在 Linux/macOS 上交叉编译 Windows 应用的示例:

    bash 复制代码
    x86_64-w64-mingw32-gcc hello.c -o hello.exe
  4. 链接 Windows 库

    MinGW-w64 提供了一些 Windows 专有的库,可以使用 -l 参数进行链接。例如,要使用 wininet 库来访问 Windows 的网络 API:

    bash 复制代码
    x86_64-w64-mingw32-gcc myprogram.c -o myprogram.exe -lwininet

三、MinGW 编译选项

  • -Wall:打开所有警告信息。
  • -O2:进行优化编译。
  • -m32 或 -m64:指定生成 32 位或 64 位代码。
  • -shared:生成动态链接库(DLL)。
  • -static:生成静态链接的可执行文件。

四、MinGW-w64 常用命令

  • x86_64-w64-mingw32-gcc:64 位 Windows 程序的 C 编译器。
  • x86_64-w64-mingw32-g++:64 位 Windows 程序的 C++ 编译器。
  • i686-w64-mingw32-gcc:32 位 Windows 程序的 C 编译器。
  • i686-w64-mingw32-g++:32 位 Windows 程序的 C++ 编译器。

五、MinGW 开发示例

  1. 生成 DLL 文件

    例如,要生成一个简单的动态链接库,可以创建 mydll.c 文件:

    c 复制代码
    #include <windows.h>
    
    __declspec(dllexport) void hello() {
        MessageBox(NULL, "Hello from DLL!", "MinGW DLL", MB_OK);
    }

    编译生成 DLL:

    bash 复制代码
    x86_64-w64-mingw32-gcc -shared -o mydll.dll mydll.c -Wl,--out-implib,libmydll.a
  2. 在 C++ 中使用 Windows API

    cpp 复制代码
    #include <windows.h>
    #include <iostream>
    
    int main() {
        MessageBox(NULL, "Hello from MinGW-w64!", "Windows API", MB_OK);
        return 0;
    }

    使用 mingw-w64 编译:

    bash 复制代码
    x86_64-w64-mingw32-g++ myprogram.cpp -o myprogram.exe

六、调试与优化

  1. 启用调试信息

    使用 -g 选项生成调试信息:

    bash 复制代码
    x86_64-w64-mingw32-gcc -g myprogram.c -o myprogram.exe
  2. 优化编译

    • -O2:大多数优化。
    • -O3:开启所有优化(可能增加编译时间)。
  3. 静态链接

    使用 -static 选项可以生成不依赖外部 DLL 的可执行文件:

    bash 复制代码
    x86_64-w64-mingw32-gcc -static myprogram.c -o myprogram.exe

    卸载 MinGW 的步骤取决于你的操作系统和安装方式。以下是不同情况下的卸载方法:

七、 卸载 MinGW

1、windows卸载
1.1 使用 MinGW Installation Manager 卸载

如果通过 MinGW Installation Manager 安装了 MinGW,可以按以下步骤卸载:

  1. 打开 MinGW Installation Manager。
  2. 在列表中找到已安装的 mingw32-base 或其他包,右键点击并选择 Mark for Removal。
  3. 点击 Installation 菜单,选择 Apply Changes,开始卸载。
1.2 手动删除 MinGW 文件夹

如果是手动安装的 MinGW(未使用安装程序),可以直接删除 MinGW 安装文件夹。常见路径是 C:\MinGW 或 C:\Program Files (x86)\MinGW。

  1. 打开文件资源管理器,导航到 MinGW 的安装目录。
  2. 选中该文件夹并删除。
  3. 删除 MinGW 路径变量:
    • 打开 控制面板 > 系统和安全 > 系统 > 高级系统设置。
    • 选择 环境变量。
    • 在 系统变量 中找到 Path 变量,点击 编辑。
    • 找到 MinGW 的路径(如 C:\MinGW\bin),选中并删除。
    • 点击 确定 保存。
2. 在 MSYS2 上卸载 MinGW-w64

如果在 MSYS2 中安装了 mingw-w64,可以通过 pacman 命令来卸载:

  1. 打开 MSYS2 终端。

  2. 运行以下命令来卸载 64 位和 32 位的 mingw-w64 工具链:

    bash 复制代码
    pacman -Rns mingw-w64-x86_64-gcc
    pacman -Rns mingw-w64-i686-gcc
  3. 也可以卸载整个 mingw-w64 相关的包:

    bash 复制代码
    pacman -Rns $(pacman -Qq | grep "^mingw-w64-")
3. 在 macOS 或 Linux 上卸载 MinGW-w64
3.1 使用 Homebrew 卸载(macOS)

如果是通过 Homebrew 安装的 MinGW-w64,使用以下命令卸载:

bash 复制代码
brew uninstall mingw-w64
3.2 手动卸载(Linux)

如果在 Linux 系统上使用包管理器安装的 MinGW-w64,可以通过以下命令卸载:

  • Debian/Ubuntu:

    bash 复制代码
    sudo apt remove --purge mingw-w64
  • Fedora:

    bash 复制代码
    sudo dnf remove mingw32-gcc mingw64-gcc
  • Arch Linux:

    bash 复制代码
    sudo pacman -R mingw-w64-gcc
4. 检查是否已成功卸载

无论在哪个系统上,卸载完成后,可以通过以下命令检查 mingw 是否还存在:

bash 复制代码
which x86_64-w64-mingw32-gcc

如果返回 command not found,则说明已经成功卸载。

七、资源

相关推荐
FOAF-lambda36 分钟前
winuia-auto 截图全攻略(ToBitmap、Screenshot 与 CaptureToImage 详解)
windows·python·自动化
wespaul1 小时前
VeapAI 自然语言操作实战|第 07 篇:执行层——编排引擎与全局语义命令
服务器·人工智能·milvus
lambo mercy1 小时前
Day4:流式传输
运维·服务器·网络
I'm Jie2 小时前
Rhost v2.0.0 版本发布!!!不止 SSH 终端,内置 AI Agent 支持自然语言操作远程服务器
运维·服务器·rust·开源·ssh·tauri·finalshell
Spatial3Ddddd2 小时前
2026空间三维重建服务商横向对比
java·服务器·人工智能
沙老师2 小时前
linux比windows死板的地方
linux·运维·windows
H.莓飛2 小时前
【Linux】进程的创建与终止
linux·运维·服务器·c语言·visual studio
福大大架构师每日一题2 小时前
agno v3.1.3发布:外部智能体全面进入“可持久化、可恢复、可取消、可回放”时代
服务器·数据库·php
宋明河2 小时前
windows与ubuntu双系统主机下ubuntu访问windows磁盘是只读
linux·windows·ubuntu
chenxy022 小时前
国产加速卡-应知应会
linux·运维·服务器