看到这个标题,我估计不少人和我一样,心里会先冒出一个问题:EasyX不是配合Visual Studio用的吗?怎么还有人往Code::Blocks上装?但实际情况是,很多学校的C语言课程设计指定用Code::Blocks,又要求图形界面,于是“Code::Blocks + EasyX”就成了绕不开的组合。我最近刚好在Code::Blocks 25.03上把整套环境跑通了,顺手把安装、汉化、库配置、第一个图形程序、以及踩过的各种坑完整记录下来,给同样被这个组合折磨的人一份可以直接照着抄的流程。
1. 为什么我要在Code::Blocks上折腾EasyX
先说结论:EasyX本身是可以配合MinGW编译器使用的,官方一直都提供MinGW版本的库文件。只是国内绝大多数教程默认走Visual Studio路线,导致Code::Blocks用户以为自己被抛弃了。其实不是这样。
1.1 使用场景:课程设计、学生作业、轻量图形需求
EasyX是一个面向C/C++的简单图形库,底层封装了Windows GDI接口,设计初衷就是让学习者用短短几十行代码画出窗口、图形、文字、动画。它适合做什么?举几个我刚帮学弟学妹看过的案例:
- 可视化排序算法,画柱状图、动态交换过程
- 简单的贪吃蛇、俄罗斯方块、Flappy Bird小游戏
- 课程设计里的函数曲线绘制、数据图表展示
- 迷宫生成与寻路可视化
这类需求有一个共同点:不需要重引擎,不需要跨平台,只要能在一个小窗口里画出图案、响应键盘鼠标就行。EasyX恰好就是干这个的。
1.2 为什么不用VS而坚持Code::Blocks
我知道很多人第一反应是:直接用Visual Studio不香吗?但实际问题很现实:
- 很多学校机房预装的就是Code::Blocks,考试、上机都在这个环境下,学生不会用VS
- Code::Blocks启动快、体积小,老电脑跑起来不卡
- Code::Blocks 25.03集成了MinGW编译器,C/C++标准支持得也不错
- 部分课程指定了Code::Blocks作为唯一IDE,没有选择空间
所以我这篇文章不会劝你“换VS”,而是老老实实解决“如何在Code::Blocks里把EasyX跑起来”这个真问题。
1.3 我的环境版本说明
下面所有操作基于这套环境,你如果版本接近应该完全通用:
| 组件 | 版本 |
|---|---|
| Code::Blocks | 25.03(带MinGW安装包) |
| 编译器 | MinGW-w64 GCC 8.1.0(Code::Blocks自带) |
| EasyX库 | 官方提供的MinGW版本文件 |
| 操作系统 | Windows 10/11(64位) |
注意:如果你用的是“免编译器版”的Code::Blocks,请先确认系统里已经有MinGW-w64,否则后面编译会报找不到编译器的错误。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Code::Blocks 25.03安装与汉化:每一步都不能省
这一步看起来简单,但我在给新手排查时发现,很多人卡在装错版本、没装编译器、汉化找不到选项这几个地方。
2.1 下载哪个安装包:必须带MINGW
Code::Blocks官网的下载页面其实提供了好几种安装包,关键要选对。
- codeblocks-25.03-setup.exe:不带编译器,空壳
- codeblocks-25.03-setup-nonadmin.exe:免管理员权限版,也不带编译器
- codeblocks-25.03mingw-setup.exe:带MinGW编译器,选这个
- codeblocks-25.03mingw-nosetup.zip:绿色解压版,适合临时使用
我建议下载 codeblocks-25.03mingw-setup.exe,安装过程中一路Next,最好保持默认路径(比如 C:\Program Files\CodeBlocks)。如果你改到带中文的路径,后面MinGW的配置偶尔会出幺蛾子,所以我一般不推荐改路径。
2.2 汉化的正确打开方式
Code::Blocks 25.03官方安装包自带中文语言文件,不需要另外下载汉化包。很多新手找不到入口,是因为它在环境设置里,不在菜单栏的语言选项。
操作路径:
- 打开Code::Blocks
- 顶部菜单栏点击
Settings - 选择
Environment(环境设置) - 左侧列表点击
View(视图) - 找到
Internationalization(国际化)这一组选项 - 从语言下拉框中选择
Chinese (Simplified) - 点击
OK,重启Code::Blocks
重启之后,整个IDE界面就变成中文了,菜单路径也会变成“设置 → 环境 → 视图 → 界面语言”。
如果你在语言列表里没有看到Chinese (Simplified),说明你装成了不带语言文件的版本。解决办法很简单:重装成上面说的带MINGW版本,或者从官网下载语言包放到
CodeBlocks\share\CodeBlocks\locale目录。
2.3 安装完成后先做一件事:验证编译器
汉化装好之后,别急着配EasyX,先确认MinGW编译器工作正常。点菜单栏 设置 → 编译器,在“全局编译器设置”里查看“选中的编译器”是否为GNU GCC Compiler,然后点“工具链可执行文件”标签,看一下编译器安装目录是否自动识别到了。
最快验证方法:菜单栏 文件 → 新建 → 项目,选“控制台应用程序”,随便建一个Hello World项目,按F9编译运行。能弹出来黑窗口输出文字,说明编译器没问题。这个步骤千万别跳,我见过太多人配了半天EasyX,最后发现最基础的控制台程序都编译不了,那问题根本不在EasyX。
3. EasyX库文件的选择:MinGW版本和VS版本是不能混用的
这是整个流程里最容易踩坑的一步,问题不在于“能不能用”,而在于“用哪个版本”。
3.1 EasyX的库文件分为两种架构
EasyX官网提供的库文件,本质上是针对不同编译器的二进制封装:
- MSVC版本:配合Visual Studio使用,库文件名通常是
.lib - MinGW版本:配合GCC/G++编译器使用,库文件名通常是
.a
Code::Blocks自带的编译器是MinGW-w64,所以必须选MinGW版。如果你不小心用了MSVC版,编译时会报链接错误,类似于 undefined reference to initgraph(...) 这种,因为GCC不认识MSVC的库格式。
3.2 下载和目录结构准备
在EasyX官网下载页面找到对应MinGW的库文件(一般描述里会写“支持Dev-C++、Code::Blocks等”),下载下来是一个压缩包。解压后目录结构大致如下:
code复制easyx_mingw/
├── include/
│ ├── graphics.h
│ ├── easyx.h
│ └── ...
└── lib/
├── libeasyx.a
└── ...
我把解压后的文件夹统一放在 D:\Develop\EasyX_CodeBlocks 这个位置,方便后面配置。你也可以放到任意位置,但路径里尽量不要有中文和空格。
3.3 两种配置思路:直接复制文件 vs 在IDE里指定路径
网上很多教程让你把graphics.h直接复制到MinGW的include目录,把libeasyx.a复制到MinGW的lib目录。这种做法的优点是简单粗暴,一劳永逸,缺点是会污染编译器目录,以后升级EasyX或者换编译器时容易搞混。
我推荐另一种做法:在Code::Blocks的全局编译器设置中,添加额外的搜索路径。这样EasyX的文件待在独立目录里,项目配置干净,也方便版本管理。
4. Code::Blocks工程配置实操:搜索目录、库文件名、项目模板
这部分是本文的核心,我会把每一步操作和背后的逻辑都讲清楚,避免大家瞎试。
4.1 全局编译器设置:让所有项目都能使用EasyX
打开Code::Blocks,依次进入:
设置 → 编译器 → 全局编译器设置 → 搜索目录
这里有三个标签页,需要分别配置:
| 标签页 | 需要填写的路径 | 作用 |
|---|---|---|
| 编译器 | D:\Develop\EasyX_CodeBlocks\include |
让编译器能找到graphics.h头文件 |
| 链接器 | D:\Develop\EasyX_CodeBlocks\lib |
让链接器能找到libeasyx.a库文件 |
| 资源编译器 | 一般不用填 | 手动资源编译时才需要 |
填完之后点击OK保存。这里的设置是全局生效的,意味着之后每个新建项目都不需要再重复配置头文件路径和库路径。
4.2 项目级链接设置:告诉编译器要链接哪个库
虽然搜索路径配好了,但编译器还不会主动去链接EasyX的库文件。这就好比你知道书在哪个书架上,但还没决定具体要看哪本书。所以每个使用EasyX的项目,都要在项目设置里把库文件加进来。
步骤:
- 在Code::Blocks左侧的“管理”面板中,右键点击你的项目名
- 选择
构建选项 - 切换到
链接器设置标签页 - 在左侧的“链接库”列表下方,点击
添加 - 浏览到
D:\Develop\EasyX_CodeBlocks\lib,选择libeasyx.a - 点击
OK
完成后,链接库列表里会出现 libeasyx.a 这一项。
如果你下载的EasyX库解压后有多个
.a文件,请看清楚哪个是MinGW版的。有些压缩包会同时带64位和32位两个子目录,注意选择与你系统位数一致的版本。
4.3 编译标准设置:这一步很多人会忽略
Code::Blocks 25.03新建项目时,默认的编译标准可能是C++14或C++17,这个对EasyX本身没有太大影响。但如果你的代码里用了EasyX的某些新特性,或者用了C++11以后的语法,需要确保编译器版本支持。
在 构建选项 → 编译器设置 → 编译器标准 中,我一般选“GNU C++17”。5分钟的配置时间,能避免不少语法兼容问题。
4.4 保存为项目模板:一劳永逸的做法
如果你以后可能经常写EasyX程序,建议把配置好的项目保存为模板,省得每次新建项目都要设置一遍链接库。
具体方法:
- 完成上述配置后,关闭Code::Blocks
- 找到项目文件(后缀
.cbp),把包含libeasyx.a链接配置的信息记下来 - 或者更简单的方式:每次新建项目时,直接从旧项目拷贝一份,改个名字
如果你给经常一起写作业的同学分享配置好的项目,直接把整个项目文件夹拷给他就行,只要他的Code::Blocks也配置好了全局搜索路径,打开就能编译运行。这个技巧比手动新建项目再配一遍要省事很多。
5. 第一个图形程序:从编译到运行的完整验证
配置完成后,我们来写一个最简单的图形程序,验证整条链路是否通畅。
5.1 创建项目:建议用空的C++项目
不要用“控制台应用程序”模板,因为它会自动生成一个包含 main 函数默认代码的项目,看着碍眼。在 文件 → 新建 → 项目 中,选择 空项目,语言选C++,然后一路默认。
我给项目起名叫 EasyXTest,项目位置选在 D:\CBProjects\EasyXTest。
5.2 测试代码:画一个完整的窗口
在项目中新建一个 main.cpp,输入以下代码:
cpp复制#include <graphics.h>
#include <conio.h>
#include <cmath>
int main()
{
initgraph(640, 480); // 初始化窗口,宽640、高480
setbkcolor(WHITE); // 设置背景色为白色
cleardevice(); // 清屏
setlinecolor(BLACK); // 设置线条颜色为黑色
// 画一个圆形
circle(320, 240, 100);
// 画一条对角线
line(0, 0, 640, 480);
// 在窗口中输出文字
settextstyle(24, 0, "SimSun");
settextcolor(RGB(255, 0, 0));
outtextxy(50, 50, "Hello EasyX on Code::Blocks");
// 按任意键关闭窗口
_getch();
closegraph();
return 0;
}
5.3 编译运行:可能出现的情况
按F9编译。如果一切正常,会弹出一个640x480的窗口,背景是白色,中间有一个黑色圆,一条对角线穿过窗口,左上角还有一行红字。
如果在这一步遇到任何问题,不要慌,下一步我会把最常见的几种报错逐条列出来,按图索骥即可。
5.4 为什么这段测试代码有意义
这段代码虽然简单,但覆盖了EasyX的核心功能:
initgraph:创建图形窗口,了解窗口初始化setbkcolor、cleardevice:颜色设置和清屏circle、line:基本图形绘制settextstyle、outtextxy:文字输出_getch:等待键盘输入,让窗口不闪退
如果这段代码能跑通,说明EasyX的窗口管理、图形绘制、文字渲染全部正常。
6. 我踩过的坑:链接错误、窗口闪退、中文乱码的完整排查链路
现实永远比教程骨感。我在配置过程中遇到了一些坑,有些靠搜索引擎解决了,有些折腾了很久。这里我来还原整个排查链路,让你不用重复劳动。
6.1 坑一:编译报 graphics.h: No such file or directory
完整报错:编译时提示 fatal error: graphics.h: No such file or directory。
原因分析:这个错误最直白,就是编译器找不到头文件。通常有两种可能:
- 全局搜索目录没配好,或者路径填错
- 只配置了项目级搜索目录,但项目不是用的当前编译器
排查步骤:
- 打开
设置→编译器→全局编译器设置→搜索目录 - 确认“编译器”标签页里是否有一条指向
D:\Develop\EasyX_CodeBlocks\include - 在Windows资源管理器中打开这个路径,确认
graphics.h确实存在 - 如果路径中有中文,尝试移动目录到纯英文路径
- 检查当前项目的编译器是否和全局配置一致
这五步走完,99%的情况能解决。
6.2 坑二:链接报 undefined reference to initgraph(...)
完整报错:编译成功,但链接时提示:
code复制undefined reference to `initgraph(int,int)'
原因分析:头文件找到了,但编译器不知道这个函数的实现代码在哪。本质上是库文件没有正确链接。
排查步骤:
- 再次确认项目
构建选项→链接器设置中是否添加了libeasyx.a - 看链接器搜索路径里是否包含
D:\Develop\EasyX_CodeBlocks\lib - 检查库文件名是否写对,尤其注意是不是加了
lib前缀、.a后缀 - 尝试用右键项目 →
重新构建而不是“构建”,因为有时候旧的目标文件残留会导致奇怪问题
这里我要特别说一点:Code::Blocks链接库时,一定要选对是32位还是64位的库文件。如果你的MinGW是64位的,却链了32位的库,链接器会出现非常误导人的提示,甚至看不出问题在哪。我建议在下载EasyX库时就确定好系统位数,别指望“两个都放进去总有一个能用”。
6.3 坑三:程序运行后,窗口一闪而过
刚成功编译完第一个程序,满怀期待地按F9,结果窗口唰地弹出来又立刻消失。这正是我刚接触EasyX时遇到的最初级的坑。
原因分析:main 函数里最后调用了 closegraph(),程序执行完就退出,窗口自然被销毁。正常情况下需要等待用户输入,再关闭窗口。
解决方案:在 closegraph() 之前加一个等待输入的操作:
cpp复制_getch(); // 等待任意键
或者用更通用的:
cpp复制system("pause");
我个人更推荐 _getch(),因为 system("pause") 会调用系统命令,在个别环境下会被杀毒软件拦截,不够稳定。
6.4 坑四:中文文字乱码或显示为问号
如果想在图形窗口中输出中文,比如应用标题、提示信息,一开始会踩到中文乱码的坑。
看下面这段代码:
cpp复制settextstyle(24, 0, "Microsoft YaHei");
settextcolor(BLACK);
outtextxy(200, 200, "你好");
编译运行后,窗口里显示的可能是“??”或乱码。
原因分析:问题不在EasyX,而在源文件编码。Code::Blocks 25.03新版默认使用UTF-8编码,但Windows GDI的中文文本渲染需要的是系统本地编码(GBK)。两者不一致,就乱码了。
解决方案:让源文件以GBK编码保存。在Code::Blocks中:
- 右键点击编辑区 → 选择“文件编码” 或菜单栏
设置→编辑器→编码设置 - 将当前文件编码改为GBK/GB2312
- 重新编译运行
如果改编码后还是乱码,可以试试用宽字符版本:
cpp复制settextstyle(24, 0, "Microsoft YaHei");
settextcolor(BLACK);
outtextxy(200, 200, L"你好"); // 注意L前缀
但说到底,编码一致才是根治方案。
6.5 坑五:窗口被任务栏遮挡,或者高DPI下模糊
在高分屏下,EasyX窗口可能会显得模糊,这是很多新人不太关注但影响体验的问题。
原因分析:Windows对高DPI的缩放设置,而EasyX默认没有声明DPI感知,系统就自动放大渲染,导致模糊。
解决方案:在Visual Studio中可以在项目属性里声明DPI感知,但Code::Blocks下可以直接在代码开头调用:
cpp复制#include <windows.h>
// 在main函数最开始调用
SetProcessDPIAware();
这种方式对系统是全局生效的,调用后当前进程的渲染会按真实像素来。在EasyX之前调用initgraph即可。
7. 进阶:为Code::Blocks配置一个EasyX图形项目模板
解决完上面的坑,你已经能在Code::Blocks里写EasyX程序了。但每次新建项目都要重新配置一次链接库,对于要连续写好几个项目的人来说还是有点烦。我建议花五分钟做一次项目模板配置,之后每一步都能省心。
7.1 手动创建模板:用现有项目导出
如果你希望以后新建项目时直接有一个图形项目可用,Code::Blocks其实支持自定义模板。步骤:
- 把前面配置好的
EasyXTest项目备份一份 - 在项目文件(.cbp)同目录下,新建一个
template文件夹 - 把
.cbp文件和相关源码、资源放进去 - 在Code::Blocks中,通过
文件→新建→项目底部选择“用户模板”
网络上有自动导出模板的插件,但我个人更推荐手动维护一个模板文件夹,灵活可控。项目模板本质上就是一个预先配置好链接和路径的项目文件,没必要为它做太多额外工作。
7.2 配置一个带控制台调试窗口的模板
EasyX程序在调试时,最好保留标准输入输出。如果你在使用EasyX的图形窗口时,需要在控制台打印调试信息,可以通过以下方式实现:
cpp复制#include <graphics.h>
#include <conio.h>
#include <cstdio>
int main()
{
// 保持控制台窗口可见,便于调试输出
AllocConsole();
freopen("CONOUT$", "w", stdout);
initgraph(800, 600);
printf("Debug: 窗口已初始化\n");
// 这里写你的EasyX代码
_getch();
closegraph();
return 0;
}
7.3 模板中预留注释和常用代码框架
我会在模板里放一份带注释的main.cpp,内容包括:
- 窗口初始化和关闭
- 鼠标、键盘事件监听
- 双缓冲绘图框架
这样每次新建项目都能快速进入逻辑编写,不用重复查API。写多了你会发现,图形程序的框架结构其实非常固定,大部分项目本质上就是“初始化 → 循环更新 → 退出清理”。
8. 从EasyX到更进一步的建议:什么时候该升级库
EasyX能满足多数入门和课程设计需求,但如果项目变得复杂,比如需要大量精灵、碰撞检测、复杂动画,EasyX会有些吃力。这不是EasyX的问题,而是它定位决定的。它的设计理念是“简单、易上手”,而不是“高性能”。
8.1 EasyX的适用边界
- 适合:演示程序、教学示例、课设项目、小游戏原型
- 勉强能用:带大量对象的动画(需要自己实现对象池、双缓冲)
- 不适合:需要OpenGL/DirectX级别的3D渲染、复杂粒子系统、网络游戏
8.2 当你需要进一步时,可以看看这些方向
如果你在EasyX上写完课程设计后还想继续深入图形编程,可以考虑:
- 学习SDL2:跨平台、轻量,C/C++经典多媒体库
- 学习SFML:面向对象设计更清晰,也很好上手
- 或者直接上OpenGL/WebGPU,感受现代图形管线的威力
但我不会一上来就推荐这些,学习图形编程最重要的事情是“先让一个像素出现在屏幕上”,EasyX在这个过程中功不可没。它对窗口、事件、绘图的封装非常浅,恰恰适合做图形学的启蒙工具。
9. 个人配置经验小结与最终建议
折腾了一圈,我觉得Code::Blocks + EasyX组合的不幸之处在于:EasyX的大多数教程默认VS环境,而Code::Blocks在高校中的使用率又那么高。最后简单总结几个我自己配置时的核心体会。
第一,库文件版本是第一优先级。MinGW的库和MSVC的库不能混着用,报错了先检查这一项,比反复看搜索路径有效得多。
第二,编码问题要尽早注意。Code::Blocks 25.03默认UTF-8,EasyX在Windows下的中文渲染期望GBK,写代码前先统一编码格式,避免后面排查浪费了一晚上。
第三,项目模板值得花时间配置。一次配置,长期受益。学校课程如果有多阶段作业,模板能省去大量重复劳动。
第四,善用Code::Blocks的“全局编译器设置”,把EasyX路径配成全局的,比每个项目单独配要省心得多。新项目只要链接库文件,就自动能编译运行,这对刚接触图形编程的学生朋友特别友好。
如果你按照这篇文章从头到尾操作一遍,从零到能跑出第一个图形窗口,整个过程应该控制在15分钟以内。接下来要做的,就是打开EasyX文档,挑一个自己感兴趣的小项目开写。最理想的第一个EasyX项目,不是别人推荐的那种大而全的示例,而是你自己最想画出来的那个图形——哪怕只是一个会动的笑脸。
