Dan*_* R. 2 c++ linux sdl codeblocks sdl-2
我已经玩C++了一段时间,最近刚开始进入SDL和SDL2.
我能够让点演示程序工作.
但其他程序,如Lazy Foo'Productions的复制和粘贴似乎不起作用.我安装了SDL和SDL2(并且已卸载并重新安装.)我在Ubuntu 15.04上并且我有IDE CodeBlocks链接(-ISDL2)错误是SDL_Window- SDL_WINDOWPOS_UNDEFINED- SDL_WINDOW_SHOWN- SDL_CreateWindow- SDL_GetWindowSurface- SDL_UpdateWindowSurface最后,SDL_DestroyWindow- 未在此范围内声明.
另外,我包括:
#include </usr/include/SDL/SDL.h>
#include </usr/include/SDL2/SDL.h>
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
我很确定我不需要所有这些位置,但如果没有它也无法工作.另外一点,当我输入时#includes,CodeBlocks会建议SDL2/SDL.h但不是SDL/SDL.h.
我错过了什么?
我不认为我可以在这里放入Lazy Foo代码 - 我没有得到许可......
你列出的代码;
#include </usr/include/SDL/SDL.h>
#include </usr/include/SDL2/SDL.h>
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
你为什么不把它换成
#include <SDL2/SDL.h>
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
因为第一个标题是SDL_CreateWindow声明的地方和其他SDL2函数?
此外,您不需要同时包含SDL和SDL2标头.事实上,这很可能是您的问题的根源,因为您只需要包含您正在使用的版本.
如果您正在关注lazyfoo网站上的教程,您可以检查您所关注的教程是否正在使用其目录中的SDL1.2或SDL2,因为该网站实际上有两个版本的教程.
更新:
我没注意到你的平台是一个Linux平台.然后解决问题就容易多了.您之前使用的演示是使用SDL-1.2完成的,而gcc错误则暗示您正在使用SDL-2.0,因此SDL_CreateWindow还有其他未定义的错误.您应该安装SDL-2.0库和SDL-2.0开发文件(它将为您提供必要的SDL-2.0标头).您可以将此参考您的平台发行版提供的SDL-2.0软件包.
至于编译,它将与gcc sdltest.o -lSDL -o sdltest您稍后更改的教程相同,而不是,您将发出gcc sdltest.o -lSDL2 -o sdltest指示您将代码与SDL2库链接的问题.
编辑
一个简单的SDL程序来测试您的环境.你可以使用任何简单的文本编辑器如nano或gedit或他人进行编辑,并运行上面的编译命令来测试您的设置.
最简单的方法是复制代码,然后从终端发出cat > sdltest.cpp并粘贴代码,然后按[ENTER]和[CTRL-C]结束它.然后你可以发出前面提到的编译命令g++ sdltest.cpp -lSDL2 -o sdltest.
码;
#include <SDL2/SDL.h>
#include <stdio.h>
int main()
{
SDL_Window *p;
SDL_Renderer *w;
p = SDL_CreateWindow("Game",SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,800,640,SDL_WINDOW_SHOWN);
w = SDL_CreateRenderer(p, -1, 0);
SDL_RenderClear(w);
SDL_SetRenderDrawColor(w,255,0,0,255);
SDL_Rect Rect = {220,140,200,200};
SDL_RenderFillRect(w,&Rect);
SDL_RenderPresent(w);
SDL_Delay(3000);
SDL_DestroyRenderer(w);
SDL_DestroyWindow(p);
SDL_Quit();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
5167 次 |
| 最近记录: |