I'm having trouble compiling a program I wrote a while ago (when I used SDL 1.2). There are a number of definitions missing:
- SDL_GetTicks()
- SDL_FillRect()
- SDL_SetVideoMode()
- SDL_DisplayFormatAlpha()
and many many more.
These are the headers that I'm including:
#include <SDL.h>
#include "fractile.h"
#include "graphics.h"
#include "globals.h"
#include "math.h"
#include "math_custom.h"
#include "Windows.h"
#include <stdio.h>
This is the build log
-------------- Build: Debug in Fractile (compiler: GNU GCC Compiler)---------------
mingw32-gcc.exe -Wall -Wall -g -IC:\Users\ryjensen\Programs\SDL\SDL2-2.0.3\x86_64-w64-mingw32\include\SDL2 -IC:\Users\ryjensen\Programs\SDL\SDL2_ttf-2.0.12\x86_64-w64-mingw32\include\SDL2\ -IC:\Users\ryjensen\Programs\SDL\SDL2_image-2.0.0\x86_64-w64-mingw32\include\SDL2\ -c C:\Users\ryjensen\Programs\Fractile\fractile.c -o obj\Debug\fractile.o
C:\Users\ryjensen\Programs\Fractile\fractile.c: In function 'fractal_editor':
C:\Users\ryjensen\Programs\Fractile\fractile.c:366:4: warning: implicit declaration of function 'within_rect' [-Wimplicit-function-declaration]
mingw32-g++.exe -LC:\Users\ryjensen\Programs\SDL\SDL2-2.0.3\x86_64-w64-mingw32\lib -LC:\Users\ryjensen\Programs\SDL\SDL2_ttf-2.0.12\x86_64-w64-mingw32\lib -LC:\Users\ryjensen\Programs\SDL\SDL2_image-2.0.0\x86_64-w64-mingw32\lib -o bin\Debug\Fractile.exe obj\Debug\fractile.o obj\Debug\general_functions.o obj\Debug\graphics.o obj\Debug\main.o obj\Debug\math_custom.o -lcomdlg32 -lmingw32 -lSDL2 -lSDL2_image -lSDL2_ttf -lmingw32 -lSDL2 -lSDL2_image -lSDL2_ttf -mwindows
obj\Debug\fractile.o: In function `fractal_wobble':
C:/Users/ryjensen/Programs/Fractile/fractile.c:197: undefined reference to `SDL_GetTicks'
C:/Users/ryjensen/Programs/Fractile/fractile.c:207: undefined reference to `SDL_GetTicks'
obj\Debug\fractile.o: In function `fractal_editor':
C:/Users/ryjensen/Programs/Fractile/fractile.c:424: undefined reference to `SDL_FillRect'
C:/Users/ryjensen/Programs/Fractile/fractile.c:440: undefined reference to `SDL_FillRect'
C:/Users/ryjensen/Programs/Fractile/fractile.c:446: undefined reference to `SDL_FillRect'
C:/Users/ryjensen/Programs/Fractile/fractile.c:464: undefined reference to `SDL_FillRect'
obj\Debug\general_functions.o: In function `set_window_size':
C:/Users/ryjensen/Programs/Fractile/general_functions.c:82: undefined reference to `SDL_SetVideoMode'
obj\Debug\general_functions.o: In function `load_image':
C:/Users/ryjensen/Programs/Fractile/general_functions.c:102: undefined reference to `IMG_Load'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:108: undefined reference to `SDL_DisplayFormatAlpha'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:112: undefined reference to `SDL_FreeSurface'
obj\Debug\general_functions.o: In function `create_surface':
C:/Users/ryjensen/Programs/Fractile/general_functions.c:128: undefined reference to `SDL_CreateRGBSurface'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:136: undefined reference to `SDL_DisplayFormatAlpha'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:138: undefined reference to `SDL_FreeSurface'
obj\Debug\general_functions.o: In function `init':
C:/Users/ryjensen/Programs/Fractile/general_functions.c:144: undefined reference to `SDL_Init'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:157: undefined reference to `SDL_WM_SetCaption'
obj\Debug\general_functions.o: In function `load_files':
C:/Users/ryjensen/Programs/Fractile/general_functions.c:181: undefined reference to `TTF_Init'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:189: undefined reference to `TTF_OpenFont'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:190: undefined reference to `TTF_OpenFont'
obj\Debug\general_functions.o: In function `clean_up':
C:/Users/ryjensen/Programs/Fractile/general_functions.c:207: undefined reference to `SDL_FreeSurface'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:211: undefined reference to `SDL_Quit'
C:/Users/ryjensen/Programs/Fractile/general_functions.c:212: undefined reference to `TTF_Quit'
obj\Debug\general_functions.o: In function `print_red_box':
C:/Users/ryjensen/Programs/Fractile/general_functions.c:262: undefined reference to `SDL_FillRect'
obj\Debug\graphics.o: In function `apply_surface':
C:/Users/ryjensen/Programs/Fractile/graphics.c:55: undefined reference to `SDL_UpperBlit'
obj\Debug\graphics.o: In function `apply_text':
C:/Users/ryjensen/Programs/Fractile/graphics.c:64: undefined reference to `TTF_RenderText_Blended'
C:/Users/ryjensen/Programs/Fractile/graphics.c:69: undefined reference to `SDL_FreeSurface'
obj\Debug\graphics.o: In function `apply_surface_clips':
C:/Users/ryjensen/Programs/Fractile/graphics.c:84: undefined reference to `SDL_UpperBlit'
obj\Debug\graphics.o: In function `apply_outline':
C:/Users/ryjensen/Programs/Fractile/graphics.c:98: undefined reference to `SDL_FillRect'
C:/Users/ryjensen/Programs/Fractile/graphics.c:102: undefined reference to `SDL_FillRect'
C:/Users/ryjensen/Programs/Fractile/graphics.c:109: undefined reference to `SDL_FillRect'
C:/Users/ryjensen/Programs/Fractile/graphics.c:113: undefined reference to `SDL_FillRect'
obj\Debug\graphics.o: In function `gradient':
C:/Users/ryjensen/Programs/Fractile/graphics.c:172: undefined reference to `SDL_FillRect'
obj\Debug\graphics.o:C:/Users/ryjensen/Programs/Fractile/graphics.c:195: more undefined references to `SDL_FillRect' follow
obj\Debug\main.o: In function `SDL_main':
C:/Users/ryjensen/Programs/Fractile/main.c:83: undefined reference to `SDL_PollEvent'
C:/Users/ryjensen/Programs/Fractile/main.c:240: undefined reference to `SDL_Flip'
C:/Users/ryjensen/Programs/Fractile/main.c:241: undefined reference to `SDL_FillRect'
C:/Users/ryjensen/Programs/Fractile/main.c:246: undefined reference to `SDL_GetTicks'
c:/users/ryjensen/programs/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
Process terminated with status 1 (0 minute(s), 2 second(s))
37 error(s), 1 warning(s) (0 minute(s), 2 second(s))
Here is some relevant code from my project:
void fractal_wobble(struct fractalData *f, int wobbleEvent){
int i;
if(wobbleEvent==vw_evaluate){
double wobbleAngle;
for(i=0; i<f->numbVectors; i++){
if(f->vects[i].period > 0){
wobbleAngle = (2*PI*(SDL_GetTicks() - f->vects[i].wobbleStartTime))/f->vects[i].period;
f->exits[i].x = f->vects[i].x = f->vects[i].xorig*(1.0 + f->vects[i].xWobble*cos(wobbleAngle));
f->exits[i].y = f->vects[i].y = f->vects[i].yorig*(1.0 + f->vects[i].yWobble*sin(wobbleAngle));
}
}
}
if(wobbleEvent==vw_toggle){
if(f->vects[currentVector].period == 0){
f->vects[currentVector].wobbleStartTime = SDL_GetTicks();
f->vects[currentVector].period = WOBBLE_DEFAULT_PERIOD;
f->vects[currentVector].xorig = f->vects[currentVector].x;
f->vects[currentVector].yorig = f->vects[currentVector].y;
f->vects[currentVector].xWobble = WOBBLE_PERCENTAGE_OF_MAGNITUDE;
f->vects[currentVector].yWobble = WOBBLE_PERCENTAGE_OF_MAGNITUDE;
}
else
f->vects[currentVector].period = 0;
f->exits[currentVector].x = f->vects[currentVector].x = f->vects[currentVector].xorig;
f->exits[currentVector].y = f->vects[currentVector].y = f->vects[currentVector].yorig;
}
}
I must be missing something really simple.
- I've updated all of my include and lib directories.
- I've updated all of my .dll files in my working directory.
- I've updated all of my linker settings as well.
If I am able to figure it out myself, I will update this post with my solution.
You can't just update SDL from 1.x to 2.x. There is no backward compatibility here. Some old functions were removed, some new functions were added.
BTW, you can find the 'migration guide' (from 1.x to 2.x) on the wiki.