在CodeBlocks下配置SDL2开发环境
最近在学习SDL的开发,想用平时熟悉的IDE:Code::Blocks来编写SDL程序。但是我按照网上的方法试了一下,都配置不成功.然后编译不了:
我用的是Code::Blocks 12.11.用的SDL2是官网下载的SDL2-dSDL2-devel-2.0.1-mingw.tar.gz (MinGW32/64-bit)开发包版本。
在Code::Blocks下的配置是按照:
- 建立一个空的工程(Empty Project)
- 在构建选项下的Search directiories下的编译器路径中添加:
D:SDL2-2.0.1x86_64-w64-mingw32includeSDL2 - 在链接器路径中添加:
D:SDL2-2.0.1x86_64-w64-mingw32lib
上图:
- 然后在Linker Settings下添加其他编译器选项:
-lmingw32 -lSDL2 -lSDL2main -lSDL2.dll -luser32 -lgdi32 -lwinmm -ldxguid -mwindows - 然后确定,加入一个最简单的SDL2程序:(main.cpp):
#include <SDL.h> #include <stdio.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main( int argc, char* args[] ) { SDL_Window* window = NULL; SDL_Surface* screenSurface = NULL; if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { printf( "SDL could not initialize! SDL_Error: %sn", SDL_GetError() ); } else { window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN ); if( window == NULL ) { printf( "Window could not be created! SDL_Error: %sn", SDL_GetError() ); } else { screenSurface = SDL_GetWindowSurface( window ); SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) ); SDL_UpdateWindowSurface( window ); SDL_Delay( 2000 ); } } SDL_DestroyWindow( window ); SDL_Quit(); return 0; }
- 然后,编译.提示以下错误:
-------------- Build: Debug in TestSDL2 (compiler: GNU GCC Compiler)--------------- mingw32-g++.exe -Wall -g -ID:SDL2-2.0.1x86_64-w64-mingw32includeSDL2 -c D:CWorkTestSDL2main.cpp -o objDebugmain.o mingw32-g++.exe -LD:SDL2-2.0.1x86_64-w64-mingw32lib -o binDebugTestSDL2.exe objDebugmain.o -lmingw32 -lSDL2 -lSDL2main -lSDL2.dll -luser32 -lgdi32 -lwinmm -ldxguid -mwindows objDebugmain.o: In function `SDL_main': D:/CWork/TestSDL2/main.cpp:12: undefined reference to `SDL_Init' D:/CWork/TestSDL2/main.cpp:14: undefined reference to `SDL_GetError' D:/CWork/TestSDL2/main.cpp:18: undefined reference to `SDL_CreateWindow' D:/CWork/TestSDL2/main.cpp:21: undefined reference to `SDL_GetError' D:/CWork/TestSDL2/main.cpp:25: undefined reference to `SDL_GetWindowSurface' D:/CWork/TestSDL2/main.cpp:26: undefined reference to `SDL_MapRGB' D:/CWork/TestSDL2/main.cpp:26: undefined reference to `SDL_FillRect' D:/CWork/TestSDL2/main.cpp:27: undefined reference to `SDL_UpdateWindowSurface' D:/CWork/TestSDL2/main.cpp:28: undefined reference to `SDL_Delay' D:/CWork/TestSDL2/main.cpp:31: undefined reference to `SDL_DestroyWindow' D:/CWork/TestSDL2/main.cpp:32: undefined reference to `SDL_Quit' c:/program files/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status 过程结束,其状态为 1 (0 分钟, 2 秒) 12 errors, 0 warnings (0 minutes, 2 seconds)
求大神帮我看看,我哪儿错了。网上也找不到解决的方法。配置到底出了什么问题呀。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
我也被这个问题折腾了很久,后来在一篇博文里找到了问题所在:“(其它链接器选项)输入“-lmingw32 -lSDL2main -lSDL2”,顺序不能错,否则报错”。
博文地址:https://blog.csdn.net/csx66406602/article/details/52847146
回复
CB很久不用了,自己想想办法吧
可不可以在CB中设置一下呀。一定要用到msys吗?
回复
pkg-config --libs 输出 lib 相关的编译参数 pkg-config --cflags 输出 include 相关的编译参数
回复
能不能给我讲解一下这条语句的意思呀,多谢
回复
谢谢啊,明天我试试
把 pkg-config --libs --cflags sdl2 输出的东西加到 gcc x.c 后面
-lSDL2.dll
msys bash 下 “ gcc x.c `pkg-config --libs --cflags sdl2` ” 编译无错误输出 x.c 文件是你的代码
-lSDL2.dll
msys bash 下 “ gcc x.c `pkg-config --libs --cflags sdl2` ” 编译无错误输出 x.c 文件是你的代码
我记得CB支持pkg-config的吧,试试pkg-config,sdl2的官方devel包也自带pc文件的
我已为此忙了一个下午了。好头疼呀