在Windows下用MinGW配置Code::Blocks 17.12的SDL时,链接器选项存疑
嘿,我经常用Code::Blocks搭配MinGW搞SDL开发,看到你的问题刚好能帮上忙!
首先你走的配置路径完全没错——打开项目后通过「Project→Properties→Project's build options」进入Linker settings,这个界面的两个区域其实是Code::Blocks给链接器传参数的两种方式:
先搞懂这两个区域的区别
- Link libraries:这里是你手动选择的库文件(比如
libSDL2.a、libSDL2main.a),Code::Blocks会自动把它们转换成链接器能识别的-l格式命令(比如选了libSDL2.a就会变成-lSDL2) - Other linker options:这里是直接写给MinGW链接器
ld的原始命令行参数,一些SDL在Windows平台运行必须的特殊配置会放在这儿
那些「看似奇怪但完全正常」的SDL链接选项
新手容易觉得陌生的其实都是SDL在Windows平台运行的必备配置:
-mwindows:让程序编译成Windows GUI程序,不会弹出默认的黑色控制台窗口,做SDL游戏/界面程序基本都要加-lSDL2main:SDL专门做的入口封装库,替代标准main函数,帮你处理Windows平台的窗口初始化逻辑-lSDL2:SDL的核心功能库,图形渲染、输入响应、音频播放全靠它-lmingw32:MinGW的基础运行库,必须放在-lSDL2main前面,不然会报找不到WinMain的错误,这个顺序千万别搞反!
怎么判断是不是异常选项?
如果你的选项是上面这些,或者是SDL的扩展库(比如-lSDL2_image、-lSDL2_ttf),那完全没问题。但要是遇到这些情况就得检查了:
- 重复添加了相同的库参数(比如既在Link libraries加了
libSDL2.a,又在Other linker options写了-lSDL2),可能会出现链接警告 - 出现了你没手动添加过的陌生参数,大概率是误操作添加的,删掉即可
- 库的顺序错误(比如
-lSDL2main放在-lmingw32后面),直接会导致编译失败
标准配置参考示例
在「Other linker options」里的正确配置一般是这样的:
-lmingw32 -lSDL2main -lSDL2 -mwindows
当然你也可以直接在「Link libraries」里添加对应的库文件,Code::Blocks会自动帮你生成链接参数,两种方式选一种就行,我个人更推荐后者,更直观不容易出错。
内容的提问来源于stack exchange,提问作者Daniel Kareh
相关产品推荐
相关产品推荐

