#c #linux #sdl #sdl-2
#c #linux #sdl #sdl-2
Вопрос:
Я учусь использовать SDL и, к сожалению, я не понимаю, почему gcc в Linux неправильно понимает мой код и интерпретирует его с помощью других функций и выдает мне эти ошибки компиляции. Я не понимаю, откуда это могло взяться.
disco.c :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <SDL/SDL.h>
void SDLdebugError();
int main(int argc, char const *argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window SDL_CreateWindow("Chicken Disco", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SET_WINDOW_OPENGL);
if(window == NULL) { SDLdebugError("Window Error"); };
SDL_Quit();
return EXIT_SUCCESS;
}
void SDLdebugError(char *message) {
printf("%s, %sn", message, SDL_GetError());
exit(EXIT_FAILURE);
}
Сборник :
disco.c: In function ‘main’:
disco.c:12:3: error: unknown type name ‘SDL_Window’; did you mean ‘SDL_cond’?
SDL_Window SDL_CreateWindow("Chicken Disco", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SET_WINDOW_OPENGL);
^~~~~~~~~~
SDL_cond
disco.c:12:31: error: expected declaration specifiers or ‘...’ before string constant
SDL_Window SDL_CreateWindow("Chicken Disco", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SET_WINDOW_OPENGL);
^~~~~~~~~~~~~~~
disco.c:12:48: error: unknown type name ‘SDL_WINDOWPOS_CENTERED’; did you mean ‘SDL_HAT_CENTERED’?
SDL_Window SDL_CreateWindow("Chicken Disco", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SET_WINDOW_OPENGL);
^~~~~~~~~~~~~~~~~~~~~~
SDL_HAT_CENTERED
disco.c:12:72: error: unknown type name ‘SDL_WINDOWPOS_CENTERED’; did you mean ‘SDL_HAT_CENTERED’?
DL_Window SDL_CreateWindow("Chicken Disco", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SET_WINDOW_OPENGL);
^~~~~~~~~~~~~~~~~~~~~~
SDL_HAT_CENTERED
disco.c:12:96: error: expected declaration specifiers or ‘...’ before numeric constant
ow("Chicken Disco", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SET_WINDOW_OPENGL);
^~~
disco.c:12:101: error: expected declaration specifiers or ‘...’ before numeric constant
hicken Disco", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SET_WINDOW_OPENGL);
^~~
disco.c:12:106: error: unknown type name ‘SET_WINDOW_OPENGL’; did you mean ‘SDL_VIDEO_OPENGL’?
n Disco", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SET_WINDOW_OPENGL);
^~~~~~~~~~~~~~~~~
SDL_VIDEO_OPENGL
disco.c:13:6: error: ‘window’ undeclared (first use in this function); did you mean ‘rindex’?
if(window == NULL) { SDLdebugError("Window Error"); };
^~~~~~
rindex
Комментарии:
1.
SDL_Window SDL_CreateWindow("
является своего рода недопустимым синтаксисом. Ты имеешь в видуSDL_Window window = SDL_CreateWindow("
?2. Для систем Unix-y SDL2 обычно устанавливается
SDL.h
в<prefix>/SDL2/SDL.h
; вSDL.h
котором<prefix>/SDL/SDL.h
находится SDL 1.2. Обычно вы можете положиться на pkg-config , который сообщит вам, где / что включает SDL2 / находятся библиотеки:gcc `pkg-config --cflags sdl2` main.c `pkg-config --libs sdl2`
3. Да, вы, кажется, используете старый SDL1 вместо SDL2.
4.
SDL_Window *window = SDL_CreateWindow(...
Ответ №1:
Вы не объявили window
переменную. Это должно решить все ваши проблемы.
Ответ №2:
Спасибо всем за ваши ответы. Наконец, genpfault был прав, я переустановил libsdl2-dev через apt и заменил
#include <SDL/SDL.h>
Автор:
#include <SDL2/SDL.h>
и скомпилированы с: gcc disco.c ``sdl2-config --cflags --libs`` -o disco
И я также объявил переменную window: D (Джордан Мотта)