在CodeBlocks下配置SDL2开发环境

刘越 发布于 2013/10/27 14:33
阅读 4K+
收藏 2

    最近在学习SDL的开发,想用平时熟悉的IDE:Code::Blocks来编写SDL程序。但是我按照网上的方法试了一下,都配置不成功.然后编译不了:

    我用的是Code::Blocks 12.11.用的SDL2是官网下载的SDL2-dSDL2-devel-2.0.1-mingw.tar.gz (MinGW32/64-bit)开发包版本。

    在Code::Blocks下的配置是按照:


  1.     建立一个空的工程(Empty Project)
  2.      在构建选项下的Search directiories下的编译器路径中添加:    
         D:\SDL2-2.0.1\x86_64-w64-mingw32\include\SDL2
  3.     在链接器路径中添加:
        D:\SDL2-2.0.1\x86_64-w64-mingw32\lib
        上图:
        
  4. 然后在Linker Settings下添加其他编译器选项:
    -lmingw32 -lSDL2 -lSDL2main -lSDL2.dll -luser32 -lgdi32 -lwinmm -ldxguid  -mwindows
  5. 然后确定,加入一个最简单的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: %s\n", 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: %s\n", 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;
    }

  6. 然后,编译.提示以下错误:
    -------------- Build: Debug in TestSDL2 (compiler: GNU GCC Compiler)---------------
    
    mingw32-g++.exe -Wall  -g    -ID:\SDL2-2.0.1\x86_64-w64-mingw32\include\SDL2  -c D:\CWork\TestSDL2\main.cpp -o obj\Debug\main.o
    mingw32-g++.exe -LD:\SDL2-2.0.1\x86_64-w64-mingw32\lib  -o bin\Debug\TestSDL2.exe obj\Debug\main.o   -lmingw32 -lSDL2 -lSDL2main -lSDL2.dll -luser32 -lgdi32 -lwinmm -ldxguid  -mwindows  
    obj\Debug\main.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)
    求大神帮我看看,我哪儿错了。网上也找不到解决的方法。配置到底出了什么问题呀。


加载中
0
刘越
刘越
我已为此忙了一个下午了。好头疼呀
0
饼干的荣耀
饼干的荣耀
我记得CB支持pkg-config的吧,试试pkg-config,sdl2的官方devel包也自带pc文件的
0
饼干的荣耀
饼干的荣耀
msys bash 下 “ gcc x.c `pkg-config --libs --cflags sdl2` ” 编译无错误输出 x.c 文件是你的代码
0
mallon
mallon
-lSDL2.dll 
0
刘越
刘越

引用来自“饼干的荣耀”的答案

msys bash 下 “ gcc x.c `pkg-config --libs --cflags sdl2` ” 编译无错误输出 x.c 文件是你的代码
哥么,还要用到msys吗?我用的MingW不包括的MSYS的。(是CodeBlocks自带的)。有没有别的方法呀
0
刘越
刘越

引用来自“Mallon”的答案

-lSDL2.dll 
??
0
饼干的荣耀
饼干的荣耀
把 pkg-config --libs --cflags sdl2 输出的东西加到 gcc x.c 后面
刘越
刘越
回复 @饼干的荣耀 : 谢谢啊,明天我试试
饼干的荣耀
饼干的荣耀
回复 @刘越 : pkg-config --libs 输出 lib 相关的编译参数 pkg-config --cflags 输出 include 相关的编译参数
刘越
刘越
回复 @饼干的荣耀 : 能不能给我讲解一下这条语句的意思呀,多谢
饼干的荣耀
饼干的荣耀
回复 @刘越 : CB很久不用了,自己想想办法吧
刘越
刘越
可不可以在CB中设置一下呀。一定要用到msys吗?
0
不冬眠的蛇

我也被这个问题折腾了很久,后来在一篇博文里找到了问题所在:“(其它链接器选项)输入“-lmingw32 -lSDL2main -lSDL2”,顺序不能错,否则报错”。

博文地址:https://blog.csdn.net/csx66406602/article/details/52847146

返回顶部
顶部