如何在Windows上安装和使用Cygwin或MinGW【开发环境】

发布时间 - 2026-01-01 00:00:00    点击率:
Cygwin通过cygwin1.dll模拟POSIX层,MinGW-w64则生成原生Windows可执行文件;前者适合类Linux环境开发,后者适合分发独立程序。

如果您希望在Windows系统上获得类Unix的开发环境,Cygwin和MinGW是两个常用选择。它们分别通过不同机制提供POSIX兼容性与原生Windows API调用支持。以下是安装与使用这两种工具的具体步骤:

一、安装Cygwin

Cygwin通过动态链接库cygwin1.dll模拟POSIX层,使Linux风格的命令行工具和开发工具能在Windows上运行。安装过程需下载官方安装程序并按需选择软件包。

1、访问Cygwin官网https://www.cygwin.com/,点击“Install Cygwin”下载setup-x86_64.exe(64位系统)或setup-x86.exe(32位系统)。

2、双击运行安装程序,选择“Install from Internet”,点击“Next”。

3、指定本地软件包存放目录(如C:\cygwin64\packages),点击“Next”。

4、选择根安装目录(默认C:\cygwin64),点击“Next”。

5、选择网络连接方式,保持默认“Direct connection”,点击“Next”。

6、在镜像站点列表中任选一个(如http://cygwin.mirror.constant.com),点击“Next”。

7、在包选择界面,展开“Devel”类别,勾选gcc-g++、make、gdb、git、vim等核心开发组件;可同时勾选“Net”下的openssh以启用SSH功能。

8、点击“Next”开始下载并安装所选包,完成后勾选“Create icon on Desktop”,点击“Finish”。

二、启动并配置Cygwin终端

安装完成后,Cygwin提供bash shell环境,其路径解析、权限模型和行为接近Linux。首次运行时需初始化用户账户并设置环境变量。

1、双击桌面Cygwin Terminal图标,启动bash会话。

2、首次运行时自动创建当前Windows用户的Cygwin主目录(如/cygdrive/c/Users/YourName/home/YourName)。

3、编辑~/.bashrc文件:运行vim ~/.bashrc,在末尾添加别名或PATH扩展,例如:export PATH="/usr/local/bin:$PATH"

4、执行source ~/.bashrc使配置立即生效。

5、验证GCC安装:输入gcc --version,确认输出版本信息。

三、安装MinGW-w64(推荐替代方案)

MinGW-w64不依赖第三方DLL,直接编译生成原生Windows PE格式可执行文件,更适合需要分发独立二进制程序的场景。MSYS2是其主流集成分发版,包含包管理器pacman和完整开发工具链。

1、访问https://www.msys2.org/,下载最新msys2-x86_64-*.exe安装程序。

2、运行安装程序,选择安装路径(建议不含空格和中文,如C:\msys64),勾选“Run MSYS2 now”,点击“Next”。

3、首次启动后,执行pacman -Syu更新基础系统;若提示重启终端,关闭后重新运行MSYS2 UCRT64(推荐用于现代开发)。

4、再次运行pacman -Su完成剩余更新。

5、安装开发工具集:在UCRT64终端中运行pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

6、该命令将安装gcc、g++、make、cmake、gdb、pkg-config等,默认位于/mingw64/bin/目录下。

四、使用MinGW-w64编译C程序

MinGW-w64工具链通过前缀区分目标平台,UCRT64环境使用x86_64-w64-mingw32-系列命令,确保链接正确的运行时库。

1、在UCRT64终端中创建测试目录:mkdir ~/hello && cd ~/hello

2、创建源文件:echo '#include \nint main(){printf("Hello from MinGW-w64!\\n");return 0;}' > hello.c

3、使用MinGW-w64 GCC编译:x86_64-w64-mingw32-gcc -o hello.exe hello.c

4、运行生成的可执行文件:./hello.exe,观察控制台输出。

5、检查依赖:运行ntldd hello.exe,确认仅链接ucrtbase.dll等系统级DLL,无第三方运行时依赖。

五、切换与调用不同环境的Shell

MSYS2提供多个子系统终端,各自隔离环境变量与工具路径。正确选择终端类型可避免工具链冲突或路径解析异常。

1、UCRT64(推荐):对应mingw-w64-ucrt-x86_64-*工具链,使用UCRT运行时,适用于新项目开发。

2、MINGW64:对应mingw-w64-x86_64-*工具链,使用MSVCRT运行时,兼容旧版Windows XP(已不推荐)。

3、MSYS2:提供POSIX*层,含autoconf/automake等构建工具,适合编译依赖configure脚本的开源项目。

4、从Windows命令行直接调用MinGW工具:将C:\msys64\mingw64\bin加入系统PATH,之后可在cmd或PowerShell中直接使用gcc命令(注意此操作可能覆盖其他GCC安装)。

5、验证当前终端类型:在任意MSYS2终端中运行uname -m && echo $MSYSTEM,输出x86_64与UCRT64表示处于正确环境。


# linux  # git  # windows  # internet  # 工具  # ai  # unix  # 环境变量  # win  # windows系统  # bash  # echo  # include  # printf  # vim  # http  # https  # ssh  # 首次  # 安装程序  # 勾选  # 开发工具  # 可执行文件  # 软件包  # 双击  # 第三方  # 命令行  # 如果您 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel怎么实现模型属性的自动加密  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  详解Android中Activity的四大启动模式实验简述  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  网站页面设计需要考虑到这些问题  深圳网站制作平台,深圳市做网站好的公司有哪些?  无锡营销型网站制作公司,无锡网选车牌流程?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  iOS发送验证码倒计时应用  佛山网站制作系统,佛山企业变更地址网上办理步骤?  微信小程序 wx.uploadFile无法上传解决办法  利用vue写todolist单页应用  如何在腾讯云服务器上快速搭建个人网站?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  制作旅游网站html,怎样注册旅游网站?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  清除minerd进程的简单方法  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  linux top下的 minerd 木马清除方法  如何快速上传自定义模板至建站之星?  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  如何有效防御Web建站篡改攻击?  如何在万网主机上快速搭建网站?  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何彻底删除建站之星生成的Banner?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  JavaScript如何实现错误处理_try...catch如何捕获异常?  网站优化排名时,需要考虑哪些问题呢?  Python制作简易注册登录系统  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  如何在宝塔面板创建新站点?  如何快速生成专业多端适配建站电话?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?