Я пытался изучить SDL2 с помощью библиотеки SDL2_gfx, но у меня возникают трудности с компиляцией примера программы.Когда я запускаю:
g++ -c -Wall main.cpp -o main.o
g++ main.o -L/usr/local/lib -lSDL2 -framework SDL2 -o main
Undefined symbols for architecture x86_64:
"_boxColor", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [main] Error 1
Я также пробовал несколько разных вещей, например, использование sdl2-config --libs --cflags
, но это выдает ту же ошибку.Когда используются только функции SDL2, он прекрасно компилируется, проблема заключается в функциях SDL2_gfx.Я относительно новичок в C ++, но когда я случайно допустил синтаксическую ошибку с функцией boxColor
, компилятор поймал ее, поэтому я думаю, что она правильно включена в мою программу.Любая помощь будет оценена.
Вот и мой код:
#include <SDL2/SDL.h>
#include <SDL2/SDL2_gfxPrimitives.h>
#define WIDTH 640
#define HEIGHT 480
int main(int argc, char* argv[])
{
if (SDL_Init(SDL_INIT_VIDEO))
{
printf ("SDL_Init Error: %s", SDL_GetError());
return 1;
}
SDL_Window *window = SDL_CreateWindow("SDL2_gfx test", 100, 100, WIDTH, HEIGHT, SDL_WINDOW_OPENGL);
if (window == NULL)
{
printf ("SDL_CreateWindow Error: %s", SDL_GetError());
SDL_Quit();
return 2;
}
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (renderer == NULL)
{
SDL_DestroyWindow(window);
printf ("SDL_CreateRenderer Error: %s", SDL_GetError());
SDL_Quit();
return 3;
}
SDL_Event e;
int quit = 0;
while (!quit)
{
if (SDL_PollEvent(&e))
{
if (e.type == SDL_QUIT)
quit = 1;
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0xFF, 0xFF);
boxColor(renderer, WIDTH / 4, HEIGHT / 4, 3 * WIDTH / 4, 3* HEIGHT / 4, 0xFF0000FF);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_Delay(10);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}