当前位置: 首页 > article >正文

从零到一:手把手教你搭建MinGW-w64开发环境

1. 为什么需要MinGW-w64开发环境第一次在Windows上写C代码时我踩了个大坑好不容易写完的代码发现根本没法编译运行。这才意识到Windows不像Linux自带GCC编译器需要额外搭建开发环境。MinGW-w64就是解决这个问题的神器它把Linux下强大的GCC工具链搬到了Windows平台。你可能好奇MinGW和MinGW-w64有什么区别。简单来说MinGW只能编译32位程序而MinGW-w64同时支持32位和64位程序编译。现在MinGW已经停止更新了最新版本还停留在GCC 4.8.1而MinGW-w64的GCC版本已经更新到13.2.0截至2024年。所以直接选择MinGW-w64才是明智之举。这个环境特别适合以下场景学校C/C课程作业需要本地编译运行从Linux迁移到Windows开发的程序员需要编译跨平台开源项目的开发者想学习编译器原理需要实操验证的爱好者我去年带新人时就遇到过典型问题他用旧版MinGW编译的64位程序总是崩溃换成MinGW-w64后问题立刻解决。这也是为什么我强烈推荐直接从MinGW-w64开始。2. 下载MinGW-w64安装包2.1 官方下载渠道虽然网上有很多打包好的MinGW-w64但我建议从官方渠道下载。最近帮学弟解决问题时发现某些第三方打包的版本缺少关键组件导致编译时出现奇怪的错误。官方下载页面在SourceForge上打开浏览器输入https://sourceforge.net/projects/mingw-w64/files/你会看到很多版本建议选择最新的x86_64版本。比如当前最新的是mingw-w64-install.exe2.2 版本选择指南下载时会遇到几个关键选项这里详细解释下架构选择x86_6464位系统选这个i686老式32位系统用现在很少见了线程模型posix如果你需要开发跨平台应用win32纯Windows开发选这个效率更高异常处理seh64位程序推荐性能更好sjlj兼容32位程序但效率略低我通常选择x86_64 posix seh 这个组合既能编译64位程序又保持了对跨平台开发的支持。3. 安装MinGW-w64详细步骤3.1 运行安装程序双击下载的安装程序后你会看到这个界面版本选择选最新的GCC版本比如13.2.0架构选择根据之前说的选x86_64线程模型选posix或win32异常处理64位选seh安装路径我建议保持默认或者放在C:\mingw-w64这样简单的路径。曾经有学员把路径设在了包含中文和空格的目录下结果编译时各种报错排查了半天才发现是路径问题。3.2 重要安装选项在安装过程中有几个容易忽略但很重要的选项添加环境变量建议勾选可以省去后续手动配置安装文档初学者建议安装里面有详细的API参考示例代码可以看看官方示例怎么写安装完成后建议先不要关闭安装程序检查下日志确保所有组件都安装成功。我有次安装时网络不稳定导致部分组件缺失后来编译时一直报找不到头文件的错误。4. 配置系统环境变量4.1 手动配置方法如果安装时没勾选自动添加环境变量需要手动配置右键此电脑 → 属性 → 高级系统设置点击环境变量按钮在系统变量中找到Path点击编辑添加MinGW-w64的bin目录路径比如C:\mingw-w64\x86_64-13.2.0-posix-seh-rt_v11-rev0\mingw64\bin4.2 验证配置是否正确打开新的命令提示符重要必须新开窗口才能生效输入gcc --version如果看到类似这样的输出说明配置成功gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 13.2.0常见问题排查如果提示不是内部或外部命令说明路径配置有误确保用的是x86_64版本而不是i686检查路径中是否有拼写错误5. 验证开发环境5.1 编译第一个程序创建一个hello.c文件内容如下#include stdio.h int main() { printf(Hello MinGW-w64!\n); return 0; }在文件所在目录打开命令行运行gcc hello.c -o hello ./hello看到输出Hello MinGW-w64!就说明一切正常。5.2 测试C支持同样创建一个hello.cpp#include iostream int main() { std::cout Hello from C! std::endl; return 0; }编译运行g hello.cpp -o hello_cpp ./hello_cpp5.3 高级功能测试MinGW-w64支持很多GCC的高级特性比如# 开启C17标准 g -stdc17 test.cpp # 生成调试信息 gcc -g program.c # 优化编译 gcc -O2 optimize_me.c6. 常见问题解决方案6.1 找不到头文件这是最常见的问题通常有几个原因安装不完整缺少标准库环境变量配置错误使用了错误的架构版本解决方案重新安装完整版MinGW-w64检查include目录是否存在确保编译命令和安装版本匹配6.2 链接错误遇到undefined reference错误时可能是缺少链接库库路径不正确可以这样解决# 指定链接库 gcc program.c -lws2_32 # 指定库路径 gcc -L/path/to/libs program.c6.3 多线程问题如果使用posix线程模型编译时需要添加gcc -pthread thread_program.c7. 进阶配置与优化7.1 集成到VS Code在VS Code中配置MinGW-w64很方便安装C/C扩展按CtrlShiftP输入C/C: Edit Configurations修改compilerPath指向你的g.exe设置intelliSenseMode为gcc-x647.2 使用MakefileMinGW-w64完全支持make工具。创建MakefileCCgcc CFLAGS-Wall -O2 all: program program: main.c utils.c $(CC) $(CFLAGS) -o $ $^ clean: rm -f program7.3 交叉编译MinGW-w64支持交叉编译其他平台的程序# 编译32位程序 gcc -m32 program.c # 编译Windows GUI程序 gcc -mwindows gui_app.c8. 实际开发建议经过多个项目的实践我总结出几点经验保持更新每隔半年检查一次MinGW-w64更新新版编译器会修复很多bug并提升性能。项目隔离为每个项目创建独立的build目录避免污染源代码mkdir build cd build gcc ../src/main.c使用CMake对于复杂项目建议使用CMake生成构建文件cmake_minimum_required(VERSION 3.10) project(MyApp) add_executable(myapp main.cpp)调试技巧安装gdb工具配合-g选项使用gcc -g buggy.c gdb ./a.out性能优化合理使用编译优化选项gcc -O3 -marchnative fast_code.c记得第一次配置可能遇到各种问题这是完全正常的。我最初搭建环境时花了整整一天时间解决各种奇怪错误但一旦配置成功后续开发就会非常顺畅。MinGW-w64的稳定性在长期使用中得到了验证我现在的几个商业项目都在使用它进行Windows平台的编译工作。

相关文章:

从零到一:手把手教你搭建MinGW-w64开发环境

1. 为什么需要MinGW-w64开发环境 第一次在Windows上写C代码时,我踩了个大坑:好不容易写完的代码,发现根本没法编译运行。这才意识到Windows不像Linux自带GCC编译器,需要额外搭建开发环境。MinGW-w64就是解决这个问题的神器&#x…...

中兴光猫工厂模式解锁终极指南:3步开启Telnet高级权限

中兴光猫工厂模式解锁终极指南:3步开启Telnet高级权限 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 中兴光猫工厂模式解锁工具zteOnu是一款专为网络爱好者和技术人员设计…...

VLSI时代下74系列离散逻辑芯片的现代应用与设计实践

1. 从“胶水逻辑”到“系统粘合剂”:离散逻辑芯片的现代生存法则 在今天的数字电路设计领域,提起“7400系列”或者“74HC04”,很多年轻工程师的第一反应可能是博物馆里的古董,或者教科书上的历史章节。主流叙事已经被SoC、FPGA和高…...

如何让旧款iOS设备重获新生:Legacy-iOS-Kit终极指南

如何让旧款iOS设备重获新生:Legacy-iOS-Kit终极指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit Le…...

InjectFix实战:除了修Bug,如何在Unity里用它安全地‘新增’功能与属性?

InjectFix实战:突破Bug修复边界,安全扩展Unity功能 在Unity开发中,InjectFix作为热修复方案早已被开发者熟知,但大多数教程仅停留在修复Bug的基础用法上。当线上版本需要临时增加活动界面属性或工具函数时,重新打包发布…...

【仅限首批Early Access用户】Claude 3.5 Sonnet的“动态温度调节”机制详解:如何让模型在严谨性与创意性间智能切换?

更多请点击: https://intelliparadigm.com 第一章:Claude 3.5 Sonnet新功能详解 Anthropic 正式发布的 Claude 3.5 Sonnet 在推理速度、多模态理解与工具调用能力上实现显著跃升,尤其在代码生成与结构化输出方面表现突出。该模型原生支持 JS…...

打卡信奥刷题(3245)用C++实现信奥题 P8563 Magenta Potion

P8563 Magenta Potion 题目描述 给定一个长为 nnn 的整数序列 aaa,其中所有数的绝对值均大于等于 222。有 qqq 次操作,格式如下: 1 i k\texttt{1 i k}1 i k,表示将 aia_iai​ 修改为 kkk。保证 $k $ 的绝对值大于等于 222。 2 l r…...

片上网络架构设计:集体通信硬件加速与优化

1. 轻量级片上网络架构设计解析 在当今机器学习(ML)模型规模呈指数级增长的背景下,大规模并行加速器已成为支撑AI计算的关键基础设施。这类系统通常采用数千个处理单元(PE)的集成设计,而连接这些计算资源的片上网络(NoC)性能直接决定了整个系统的效率瓶颈…...

英雄联盟LCU工具:如何用LeagueAkari提升你的游戏效率

英雄联盟LCU工具:如何用LeagueAkari提升你的游戏效率 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkari是一款基于英雄联…...

Sticky:重新定义Linux桌面数字便利贴的智能助手

Sticky:重新定义Linux桌面数字便利贴的智能助手 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 你是否曾在紧张的编程调试中,突然想到一个关键算法优化方案&#xff0…...

5步快速搭建微信机器人:WeixinBot完整使用指南

5步快速搭建微信机器人:WeixinBot完整使用指南 【免费下载链接】WeixinBot 网页版微信API,包含终端版微信及微信机器人 项目地址: https://gitcode.com/gh_mirrors/we/WeixinBot 在当今自动化办公和智能交互的时代,拥有一个能够自动处…...

别再傻等进位了!手把手教你用Verilog实现4位超前进位加法器(附完整代码)

超前进位加法器的Verilog实战:从理论到硬件加速的完整实现 在数字电路设计中,加法器是最基础却又最关键的运算单元之一。传统行波进位加法器虽然结构简单,但在高位宽运算时,其级联进位方式导致的延迟问题会严重影响系统性能。想象…...

FPGA上做图像压缩,别从零造轮子!聊聊DCT那些开源IP核与设计技巧

FPGA图像压缩实战:DCT开源IP核选型与架构优化指南 在嵌入式视觉系统开发中,JPEG图像压缩是FPGA工程师经常遇到的需求场景。当项目周期紧张且资源有限时,明智的开发者会优先考虑利用经过验证的开源IP核,而非从零开始实现离散余弦变…...

STM32CubeMX实战指南:基本定时器中断配置与精准延时应用

1. 认识STM32基本定时器 第一次接触STM32定时器时,我完全被各种类型的定时器搞晕了。直到后来才发现,基本定时器其实是最好上手的。STM32F1系列通常包含TIM6和TIM7两个基本定时器,它们就像电子表里的秒表功能 - 只能计时,没有花哨…...

从微波炉到激光加工:手把手教你用COMSOL搞定4种电磁加热的仿真设置

从微波炉到激光加工:COMSOL电磁加热仿真实战指南 电磁加热技术早已渗透进现代工业与生活的每个角落——从家用微波炉的磁控管震荡,到新能源汽车电池的感应焊接,再到精密医疗器械的激光切割。这些看似迥异的应用背后,都遵循着相同…...

MyBatis如何实现动态数据源切换?

MyBatis如何实现动态数据源切换 在现代应用中,特别是微服务架构中,使用多个数据库的情况越来越常见。MyBatis是一个流行的Java持久层框架,它允许我们方便地与多种数据库进行交互。在某些情况下,我们可能需要动态切换数据源&#x…...

Spring AI 2.0 开发Java Agent智能体 - 会话记忆(Chat Memory)

大家好,我是Java1234_小锋老师,最近更新《2027版本 Spring AI 2.0 开发Java Agent智能体 视频教程》专辑,感谢大家支持。本课程主要介绍和讲解Spring AI 2.0简介,Spring AI 2.0 HelloWorld搭建,Advisors — 拦截器模式…...

手把手教你排查和修复Gradle Daemon启动失败的NoClassDefFoundError

深度解析Gradle Daemon启动失败的NoClassDefFoundError排查方法论 当你正专注于开发进度,突然在终端看到一行刺眼的红色错误提示:"Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7",Gradle构建进程戛然而止。这…...

如何快速掌握ComfyUI图像修复插件:终极完整使用指南

如何快速掌握ComfyUI图像修复插件:终极完整使用指南 【免费下载链接】comfyui-inpaint-nodes Nodes for better inpainting with ComfyUI: Fooocus inpaint model for SDXL, LaMa, MAT, and various other tools for pre-filling inpaint & outpaint areas. 项…...

Honey Select 2汉化补丁:5分钟打造你的完美游戏体验

Honey Select 2汉化补丁:5分钟打造你的完美游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey Select 2》的语言障碍而烦恼吗&a…...

暗黑破坏神2存档编辑器:3步掌握d2s-editor的终极修改指南

暗黑破坏神2存档编辑器:3步掌握d2s-editor的终极修改指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2中无尽刷装备而烦恼吗?想快速体验不同职业的build却不想花费数百小时&#xff…...

Cadence焊盘绘制实战:从零到一构建PCB封装基石

1. 为什么焊盘设计是PCB封装的基石 刚入行硬件设计那会儿,我总以为画封装就是照着尺寸描边。直到有次量产时发现整批QFN芯片虚焊,才明白焊盘设计才是封装可靠性的命门。Cadence的分离式设计哲学——将焊盘(Padstack)与封装&#x…...

从玩具车到智能体:用STC89C52给小车装上‘眼睛’和‘触角’的传感器融合实战

从玩具车到智能体:STC89C52多传感器融合的决策系统设计 当一辆普通的玩具车被赋予环境感知能力,它便开始了向智能体的进化。在这个项目中,我们使用STC89C52单片机作为"大脑",通过超声波模块和漫反射光电传感器构建了一…...

Simulink进阶:用S-Function Builder封装你的C语言电机控制算法(以MTPA为例)

Simulink进阶:用S-Function Builder封装C语言电机控制算法实战指南 在电机控制领域,算法验证环节常常面临一个关键矛盾:DSP嵌入式代码的高效性与Simulink系统级仿真的可视化优势如何兼得?我曾参与过一个永磁同步电机控制项目&…...

暗黑破坏神2存档编辑器:5分钟掌握你的游戏命运

暗黑破坏神2存档编辑器:5分钟掌握你的游戏命运 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2的重复刷怪而烦恼吗?想快速体验各种强力build却不想花费数百小时练级?d2s-edi…...

DSP+FPGA异构架构在实时信号处理中的应用与优化

1. 实时信号处理系统架构解析在工业自动化、医疗影像和通信系统中,对信号处理实时性要求极高的场景比比皆是。传统纯软件方案往往受限于CPU的串行处理特性,难以满足严格的时序要求。这正是DSPFPGA异构架构大显身手的领域——我曾参与过多个类似项目&…...

航模老鸟的‘省钱’秘籍:一块BB响如何守护你的多块锂电池(附设置误区避坑)

航模电池管理的低成本智慧:BB响的进阶使用策略 在航模和无人机领域,电池管理一直是玩家们关注的焦点。对于拥有多块电池的资深爱好者或小型工作室来说,如何在保证安全的前提下优化成本,是一个值得深入探讨的话题。传统做法是为每块…...

深入理解 Tool Use 机制:AI Agent Harness Engineering 如何调用外部工具

深入理解 Tool Use 机制:AI Agent Harness Engineering 如何调用外部工具 引言 背景介绍 相信所有使用过大模型的开发者都遇到过这些典型痛点:问ChatGPT“今天北京的气温是多少”,它会告诉你“我的知识截止到2023年10月,无法提供实时天气信息”;让它计算“12345.67 * 9…...

从SPICE到Q-SPICE:四阶累积量如何重塑阵列信号处理的超分辨能力

1. 从SPICE到Q-SPICE:为什么我们需要四阶累积量? 我第一次接触SPICE算法是在处理雷达信号的时候。当时团队遇到一个头疼的问题:在强噪声环境下,传统算法就像近视眼观察星空,明明知道那里有信号,却怎么也分辨…...

从零搭建生产级LLM API服务:架构设计、部署与性能调优实战

1. 项目概述与核心价值 最近在折腾大语言模型本地部署和API服务搭建的朋友,估计都绕不开一个词:文档。不是模型本身的论文,而是那些能把复杂技术栈串起来、让你从“能跑起来”到“能稳定用起来”的操作指南。我关注到 GitHub 上一个名为 var…...