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-w64MinGW 的扩展版,支持 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:\MinGWC:\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,则说明已经成功卸载。

七、资源

相关推荐
蓝莓星冰乐12 分钟前
Linux入门(2)
linux·运维·服务器
wanhengwangluo1 小时前
弹性裸金属服务器和传统裸金属服务器有什么区别?
运维·服务器
来一杯龙舌兰2 小时前
【MongoDB】Windows/Docker 下载安装,MongoDB Compass的基本使用、NoSQL、MongoDB的基础概念及基础用法(超详细)
windows·mongodb·docker·mongodb compass
XZHOUMIN2 小时前
网易博客旧文----开发常用工具和软件列表
windows
Syclus2 小时前
成功解决WSL2上的Ubuntu22.04执行sudo apt-get update指令报错问题
linux·运维·服务器
小林熬夜学编程3 小时前
【Linux系统编程】第四十二弹---多线程编程全攻略:涵盖线程创建、异常处理、用途、进程对比及线程控制
linux·服务器·c语言·开发语言·c++
上烟雨心上尘3 小时前
通过 ssh config 快速免密连接服务器
运维·服务器·ssh
梦幻开局4 小时前
第六章 DNS域名解析服务器
运维·服务器
V+zmm101345 小时前
社区养老服务小程序ssm+论文源码调试讲解
java·服务器·前端·javascript·小程序·毕业设计·1024程序员节
runing_an_min5 小时前
windows运行ffmpeg的脚本报错:av_ts2str、av_ts2timestr、av_err2str => E0029 C4576
c++·windows·ffmpeg·e0029