SDL program crashing

With the help of you guys here, I have managed to solve some of my problems
with regards to my program. Appreciate it!

There’s is just one thing though.

I’m make my program (by default), saying:
gcc source.c … (linking it to static SDL library; libSDL.a)
And the program works fine

but when I try:
gcc -static source.c …(linking to the static SDL library; libSDL.a)
it crashes (and only just change the resolution as it is meant to [(meaning
it runs a bit of the program and then crashes)] when I run it.

Any idea why ?

Thanks in advance

–Mike

Can you send us a small example program to reproduce the problem? I
think I’ve heard this problem around before, but I’m not sure anyone’s
followed up on itOn Mon, Apr 20, 2009 at 7:46 AM, Mike Mike wrote:

With the help of you guys here, I have managed to solve some of my problems
with regards to my program. Appreciate it!

There’s is just one thing though.

I’m?make my program (by default), saying:
gcc source.c … (linking it to static SDL library; libSDL.a)
And the program works fine

but when I try:
gcc -static source.c …(linking to the static SDL library; libSDL.a)
it crashes (and only just change the resolution as it is meant to [(meaning
it runs a bit of the program and then crashes)] when I run it.

Any idea why ?

Thanks in advance

–Mike


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


http://codebad.com/

Yh course, with pleasure.

I have the source attached to this mail.

Thanks in advance.
-------------- next part --------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include “SDL.h”

#define XSIZE 800 //640
#define YSIZE 600 //480

SDL_Surface *thescreen;
unsigned char *vmem1, *vmem2;
int mousex,mousey;
SDL_Color themap[256];

int scrlock()
{
if(SDL_MUSTLOCK(thescreen))
{
if ( SDL_LockSurface(thescreen) < 0 )
{
fprintf(stderr, “Couldn’t lock display surface: %s\n”,
SDL_GetError());
return -1;
}
}
return 0;
}
void scrunlock(void)
{
if(SDL_MUSTLOCK(thescreen))
SDL_UnlockSurface(thescreen);
SDL_UpdateRect(thescreen, 0, 0, 0, 0);
}

#define MOUSEFRAC 2
#define MAXBLOBS 512
#define BLOBFRAC 6
#define BLOBGRAVITY 5
#define THRESHOLD 20
#define SMALLSIZE 3
#define BIGSIZE 6

#define ABS(x) ((x)<0 ? -(x) : (x))

int explodenum;

char sizes[]={2,3,4,5,8,5,4,3};

struct blob {
struct blob *blobnext;
int blobx;
int bloby;
int blobdx;
int blobdy;
int bloblife;
int blobsize;
} *blobs,*freeblobs,*activeblobs;

unsigned char **mul640;
int oldmode;

char sqrttab[]={
0,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,
5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,
6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,
11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,
14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
};

void nomem(void)
{
printf(“Not enough low memory!\n”);
SDL_Quit();
exit(1);
}

void fire(unsigned char *p1,unsigned char *p2,int pitch,char *map)
{
int x,y;
unsigned char *p3, *p4;

for(y=2;y<YSIZE;y++)
{
	for(x=0;x<XSIZE;x++)
	{
		p3 = p1+y*XSIZE+x;
		p4 = p2+y*pitch+x;
		*p4=map[*p3+p3[-XSIZE]+p3[-XSIZE-1]+p3[-XSIZE+1]+p3[-1]+p3[1]+p3[-XSIZE-XSIZE-1]+p3[-XSIZE-XSIZE]+p3[-XSIZE-XSIZE+1]];
	}
}

}

void disk(x,y,rad)
{
unsigned char p;
int i,j,k,aj;
int rad2=rad
rad;
int w;

for(j=-rad;j<=rad;j++)
{
	w=sqrttab[rad2-j*j];
	aj=ABS(j)<<2;
	if(w)
	{
		p=mul640[y+j]+x-w;
		k=w+w+1;
		i=-w;
		while(k--) {*p++=255-(ABS(i)<<2)-aj;i++;}
	}
}

}
void trydisk(void)
{
if(mousex>10 && mousex<XSIZE-10 && mousey>10 && mousey<YSIZE-10)
disk(mousex,mousey,8);
}

void addblob(void)
{
int dx,dy;
struct blob *ablob;

if(!freeblobs) return;
dx=(rand()&255)-128;
dy=(rand()%200)+340;
ablob=freeblobs;
freeblobs=freeblobs->blobnext;
ablob->bloblife=(rand()&511)+256;
ablob->blobdx=dx;
ablob->blobdy=dy;
ablob->blobx=(256+(rand()&127))<<BLOBFRAC;
ablob->bloby=2<<BLOBFRAC;
ablob->blobnext=activeblobs;
ablob->blobsize=BIGSIZE;
activeblobs=ablob;

}
void moveblobs(void)
{
struct blob **lastblob,*ablob;
int x,y;

lastblob=&activeblobs;
while(ablob=*lastblob)
{
	x=ablob->blobx>>BLOBFRAC;
	y=ablob->bloby>>BLOBFRAC;
	if(!--ablob->bloblife || y<0 || x<10 || x>XSIZE-10)
	{
		*lastblob=ablob->blobnext;
		ablob->blobnext=freeblobs;
		freeblobs=ablob;
		continue;
	}
	ablob->blobx+=ablob->blobdx;
	ablob->bloby+=ablob->blobdy;
	ablob->blobdy-=BLOBGRAVITY;
	lastblob=&ablob->blobnext;
}

}
void putblobs(void)
{
struct blob *ablob,*ablob2,*temp;
int x,y,dy;
int i,size;
long x2,y2,vel;

ablob=activeblobs;
activeblobs=0;
while(ablob)
{
	dy=ablob->blobdy;
	if(ablob->blobsize!=SMALLSIZE && (dy>-THRESHOLD && dy<THRESHOLD && !(rand()&7) || (rand()&127)==63))
	{
		i=explodenum;
		while(i-- && freeblobs)
		{
			ablob2=freeblobs;
			freeblobs=freeblobs->blobnext;
			ablob2->blobx=ablob->blobx;
			ablob2->bloby=ablob->bloby;
			for(;;)
			{
				x2=(rand()&511)-256;
				y2=(rand()&511)-256;
				vel=x2*x2+y2*y2;
				if(vel>0x3000 && vel<0x10000L) break;
			}
			ablob2->blobdx=ablob->blobdx+x2;
			ablob2->blobdy=ablob->blobdy+y2;
			ablob2->bloblife=16+(rand()&31);
			ablob2->blobsize=SMALLSIZE;
			ablob2->blobnext=activeblobs;
			activeblobs=ablob2;
			ablob->bloblife=1;
		}			
	}
	x=ablob->blobx>>BLOBFRAC;
	y=ablob->bloby>>BLOBFRAC;
	size=ablob->blobsize;
	if(size==BIGSIZE && ablob->blobdy>0 && ablob->blobdy<200)
		size=sizes[ablob->bloblife&7];
	if(x>10 && x<XSIZE-10 && y>10 && y<YSIZE-10)
		disk(x,YSIZE-1-y,size);
	temp=ablob;
	ablob=ablob->blobnext;
	temp->blobnext=activeblobs;
	activeblobs=temp;
}

}

#define RATE 1
void normal(char *map)
{
int i,j;
for(i=0;i<8192;i++)
{
j=i/9;
map[i]=j<256 ? (j>=RATE ? j-RATE : 0) : 255;
}
}
void bright(char *map)
{
int i;
for(i=0;i<8192;i++) map[i]=i>>3<255 ? (i>>3) : 255;
}

void updatemap(void)
{
SDL_SetColors(thescreen, themap, 0, 256);
}

void loadcolor(int n,int r,int g,int b)
{
themap[n].r=r<<2;
themap[n].g=g<<2;
themap[n].b=b<<2;
}

void loadcolors(unsigned int which)
{
int i,j;
int r,g,b;

which%=11;
for(i=0;i<256;i++)
{
	switch(which)
	{
	case 0:
		if(i<64) loadcolor(i,0,0,0);
		else if(i<128)	loadcolor(i,i-64,0,0);
		else if(i<192) loadcolor(i,63,i-128,0);
		else loadcolor(i,63,63,i-192);
		break;
	case 1:
		if(i<64) loadcolor(i,0,0,0);
		else if(i<128)	loadcolor(i,0,0,i-64);
		else loadcolor(i,(i-128)>>1,(i-128)>>1,63);
		break;
	case 2:
		loadcolor(i,i>>2,i>>2,i>>2);
		break;
	case 3:
		r=rand()&0x3f;
		g=rand()&0x3f;
		b=rand()&0x3f;
		loadcolor(i,r*i>>8,g*i>>8,b*i>>8);
		break;
	case 4:
		loadcolor(i,i>>2,0,0);
		break;
	case 5:
		loadcolor(i,0,i>>2,0);
		break;
	case 6:
		loadcolor(i,0,0,i>>2);
		break;
	case 7:
		j=i&15;
		if(i&16) j=15-j;
		j=(i>>2)*j/16;
		loadcolor(i,j,j,j);
		break;
	case 8:
		j=0;
		if(i>8 && i<128) j=63;
		loadcolor(i,j,j,j);
		break;
	case 9:
		j=31-(i&31)<<1;
		r=i&32 ? j : 0;
		g=i&64 ? j : 0;
		b=i&128 ? j : 0;
		loadcolor(i,r,g,b);
		break;
	case 10:
		j=(i&15)<<2;
		if(i&16) j=63-j;
		r=i&32 ? j : 0;
		g=i&64 ? j : 0;
		b=i&128 ? j : 0;
		loadcolor(i,r,g,b);
		break;
	}
}
updatemap();

}

main(int argc, char *argv[])
{
int i,k;
char *remap,*remap2;
unsigned char *p1, *p2;
long frames;
int flash;
int whichmap;
int key;
int ispaused;
unsigned long videoflags;
int done;
int now;
SDL_Event event;
long starttime;
int buttonstate;

srand(time(NULL));
if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
{
	fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
	exit(1);
}
videoflags = SDL_SWSURFACE|SDL_FULLSCREEN|SDL_HWPALETTE;

thescreen = SDL_SetVideoMode(XSIZE, YSIZE, 8, videoflags);
if ( thescreen == NULL )
{
	fprintf(stderr, "Couldn't set display mode: %s\n",
						SDL_GetError());
	SDL_Quit();
	exit(5);
}

vmem1=NULL;
vmem2=malloc(XSIZE*YSIZE);
if(!vmem2) nomem();
mul640=malloc(YSIZE*sizeof(char *));
if(!mul640) nomem();
remap=malloc(16384);
if(!remap) nomem();
remap2=malloc(16384);
if(!remap2) nomem();
blobs=malloc(MAXBLOBS*sizeof(struct blob));
if(!blobs) nomem();

puts("1 = Change color map");
puts("2 = Randomly change color map");
puts("p = Pause");
puts("spc = Fire");
puts("esc = Exit");
puts("Left mouse button = paint");
puts("Right mouse button, CR = ignite atmosphere");

freeblobs=activeblobs=0;
for(i=0;i<MAXBLOBS;i++)
{
	blobs[i].blobnext=freeblobs;
	freeblobs=blobs+i;
}

normal(remap);
bright(remap2);


flash=0;
whichmap=0;
loadcolors(whichmap);
frames=0;
ispaused=0;
addblob();
done = 0;
now=0;
starttime=SDL_GetTicks();
buttonstate=0;
mousex=mousey=0;

while(!done)
{
	if ( scrlock() < 0 ) continue;
	frames++;
	if ( vmem1 != (unsigned char *)thescreen->pixels )
	{
		p1=vmem1=thescreen->pixels;
		for (i=0;i<YSIZE;i++)
		{
			mul640[i]=i*thescreen->pitch+vmem1;
			memset(p1,0,XSIZE);
			p1+=thescreen->pitch;
		}
	}
	if(!ispaused)
	{
		now++;
		if(!flash)
		{
			if(explodenum>96 && explodenum<160 && !(rand()&511) || (buttonstate&8))
				flash=60;
		} else --flash;
		explodenum=(now>>4)+1;if(explodenum==320) now=0;
		if(explodenum>256) explodenum=256;
		if(!(rand()&31))
			addblob();
		moveblobs();
		putblobs();
		if(buttonstate&2) trydisk();
		p1=vmem1;
		p2=vmem2;
		k=thescreen->pitch;
		for(i=0;i<YSIZE;i++)
		{
			memcpy(p2,p1,XSIZE);
			p2+=XSIZE;
			p1+=k;
		}
		fire(vmem2,vmem1,k,flash ? remap2 :remap);
	}
	scrunlock();

	while(SDL_PollEvent(&event))
	{
		switch (event.type)
		{
		/*case SDL_MOUSEBUTTONDOWN:
		case SDL_MOUSEBUTTONUP:
			if ( event.button.state == SDL_PRESSED )
				buttonstate|=1<<event.button.button;
			else
				buttonstate&=~(1<<event.button.button);
			mousex=event.button.x;
			mousey=event.button.y;
			if(!ispaused && buttonstate&2) trydisk();
			break;
		case SDL_MOUSEMOTION:
			mousex=event.motion.x;
			mousey=event.motion.y;
			if(!ispaused && buttonstate&2) trydisk();
			break;*/
		case SDL_KEYDOWN:
			key=event.key.keysym.sym;
			if(key==SDLK_RETURN) {flash=60;break;}
			if(key==SDLK_1 || key==SDLK_2)
			{
				if(key==SDLK_1)
					++whichmap;
				else
					whichmap=rand();
				loadcolors(whichmap);
				break;
			}
			if(key==SDLK_ESCAPE) {done=1;break;}
			if(key==SDLK_SPACE && !ispaused) {addblob();break;}
			if(key==SDLK_p) {ispaused=!ispaused;break;}
			break;
		case SDL_QUIT:
			done = 1;
			break;
		default:
			break;
		}
	}
}

starttime=SDL_GetTicks()-starttime;
if(!starttime) starttime=1;
SDL_Quit();
printf("fps = %d\n",1000*frames/starttime);
exit(0);

}

I think the problem is the fact SDL tries to dinamically load some
resources (alsa for audio, opengl for GFX) and this is not ok in a
"static" enviroment.

Anyway FULL static binaries are suitable only for console apps IMHO, a
static X11 app will probably fail with a different version of X11
(xf86config vs Xorg for instance).

I suggest you to always use dynamic linking or at least to statically
link only SDL and other libraries that you need to distribute with
your application, never statically link with system libs.On Mon, Apr 20, 2009 at 7:46 PM, Mike Mike wrote:

Yh course, with pleasure.

I have the source attached to this mail.


Bye,
Gabry

Nice demo.

I think your problem is the dlopen indicated by the gcc output of

gcc -static test.c sdl-config --cflags --static-libs

test.c: In function ?main?:

This is because I run 64bit OS.
test.c:498: warning: format ?%d? expects type ?int?, but argument 2 has type
?long int?

This is the most likely cause of your problem:
/usr/local/lib/libSDL.a(SDL_alsa_audio.o): In function `ALSA_Init’:
SDL_alsa_audio.c:(.text+0x118): warning: Using ‘dlopen’ in statically linked
applications requires at runtime the shared libraries from the glibc version
used for linking

The way around would be to give configure an additional option
–enable-alsa-shared=no when building the SDL you use.On Monday 20 April 2009 20:46:57 Mike Mike wrote:

Yh course, with pleasure.

I have the source attached to this mail.

Thanks in advance.

As I just found out you did not use audio in the demo, so you could disable
alsa all together if you don’t plan to use any audio.

Forgot to mention that I tested this on 64bit Gentoo with Gentoo provided SDL
"libsdl-1.2.13-r1" and the program ran OK. but as it doesn’t use audio, I
can’t confirm if the dlopen part will work.On Tuesday 21 April 2009 14:28:50 Sami N??t?nen wrote:

On Monday 20 April 2009 20:46:57 Mike Mike wrote:

Yh course, with pleasure.

I have the source attached to this mail.

Thanks in advance.

Nice demo.

I think your problem is the dlopen indicated by the gcc output of

gcc -static test.c sdl-config --cflags --static-libs

test.c: In function ?main?:

This is because I run 64bit OS.
test.c:498: warning: format ?%d? expects type ?int?, but argument 2 has
type ?long int?

This is the most likely cause of your problem:
/usr/local/lib/libSDL.a(SDL_alsa_audio.o): In function `ALSA_Init’:
SDL_alsa_audio.c:(.text+0x118): warning: Using ‘dlopen’ in statically
linked applications requires at runtime the shared libraries from the glibc
version used for linking

The way around would be to give configure an additional option
–enable-alsa-shared=no when building the SDL you use.

@ Gabriele :

  • Which library are the system libs?***
    *@Sami *
  • hmm… I thought I disabled the sound (alsa) during configure by using:*

–disable-alsa

Here is how I configured SDL initially;

./configure --host=sparc-linux --enable-static --disable-shared
–disable-joystic --disable-cdrom --disable-esd --disable-nasm
–enable-video-fbcon --enable-video-opengl --enable-osmesa-shared
–disable-arts --disable-alsa --without-x --enable-debug --enable-loadso

But never the less, will try what you suggested.

thanks in advance

Extracted from an “ldd” of an SDL app:

 libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d2c000)
 libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7d06000)
 libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d02000)
 libpulse-simple.so.0 => /usr/lib/libpulse-simple.so.0 (0xb7cf5000)
 libpulse.so.0 => /usr/lib/libpulse.so.0 (0xb7ca7000)
 libdirectfb-1.0.so.0 => /usr/lib/libdirectfb-1.0.so.0 (0xb7c44000)
 libfusion-1.0.so.0 => /usr/lib/libfusion-1.0.so.0 (0xb7c3c000)
 libdirect-1.0.so.0 => /usr/lib/libdirect-1.0.so.0 (0xb7c28000)
 libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7c10000)
 /lib/ld-linux.so.2 (0xb7f24000)
 libcap.so.1 => /lib/libcap.so.1 (0xb7c0c000)
 librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7c03000)
 libSM.so.6 => /usr/lib/libSM.so.6 (0xb7bfb000)
 libICE.so.6 => /usr/lib/libICE.so.6 (0xb7be2000)
 libX11.so.6 => /usr/lib/libX11.so.6 (0xb7afb000)
 libxcb-xlib.so.0 => /usr/lib/libxcb-xlib.so.0 (0xb7af9000)
 libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb7ae1000)
 libXau.so.6 => /usr/lib/libXau.so.6 (0xb7ade000)

Now I see from your ./configure line that u don’t use alsa, X11 and
ESD, but you use opengl and this will add for sure dependency to the
shared libGL.so, you’ll also need for sure libpthread.so and probably
libdirectfb and libdirect, you’ll also link for sure with ld-linux.so.

If your target is an embedded platform like it seems I don’t see any
reason for a static compile, you’ll end up with a larger and buggier
binary and you know in advance what libraries are available in your
system.

Also, I’ve looked at your demo and I don’t understand why you need
opengl in SDL if you don’t use it! I’m quite sure that
SDL_Init(SDL_INIT_VIDEO) will try to open libGL.so also if you are
compiling static and you are not using SDL_OPENGL in your
SDL_SetVideoMode() flags.On Tue, Apr 21, 2009 at 1:58 PM, Mike Mike wrote:

@ Gabriele :
? Which library are the system libs?

Bye,
Gabry

Yh you’re right. It will be chunky eventually. And I will remove opengl as I
don’t need it.
The plan was, to include all needed library into the executable. Because, to
begin transferring individual shared library (.so) that will be needed by
the program into the embedded system, I figured, that will not only be prone
to more errors but is a lot more complicated than making it static.
Nevertheless, I am looking into it now.

Also, I don’t know if this is the source of the problem;

If one takes a look at the Galaxy Gameworks site (
http://www.galaxygameworks.com/). There’s a table on that page that said I
can’t link to the library statically (using the free version of SDL). Claims
I need to obtain commercial version.

Now whether I’m reading it right or not, I’m not sure.

What do you think?

Thanks in advance


If one takes a look at the Galaxy Gameworks site
(http://www.galaxygameworks.com/). There’s a table
on that page that said I can’t link to the library statically
(using the free version of SDL). Claims I need to obtain
commercial version.

Now whether I’m reading it right or not, I’m not sure.

What do you think?

Under the terms of the LGPL license, you can’t link statically using the free version of SDL unless your program is itself licensed under LGPL or a compatible license, or you make the object code available for other people to relink updated versions of SDL against.>From: Mike Mike

Subject: Re: [SDL] SDL program crashing…

‘you make the object code available for other people to relink updated
versions of SDL against.’-----how could I do this?

Thanks in advance


‘you make the object code available for other people to
relink updated versions of SDL against.’-----how could I do this?

When a C compiler builds, it creates intermediate files called “object
code” files. They usually have a .o extension. Then the linker goes
through and links all the object files together in the proper order and
aligns all their references correctly and you end up with a DLL or
EXE. Usually this goes on behind the scenes and the coder ignores it.
It’s all automated by the compiler. But if you actually keep the .o
files and make them available, then someone with a compatible linker
can manually run it and have it re-link against a new version of SDL.>From: Mike Mike

Subject: Re: [SDL] SDL program crashing…

yh, I do know what an object file is.
What I’m not sure of,is the proper way of making my .obj file
available for others.

Or
Do you mean, I should find someone with a commercial version and make
my .obj available for them to statistically link for me?

Thanks in advance

yh, I do know what an object file is.
What I’m not sure of,is the proper way of making my .obj file
available for others.

Or
Do you mean, I should find someone with a commercial version and make
my .obj available for them to statistically link for me?

Thanks in advance

Yeah, basically. Whatever way you distribute the commercial
version, you should also distribute the .o files. Put them on the
same DVD in a special folder, or put them up for download on
your website.

Or just don’t statically link SDL into a commercial binary. :P>----- Original Message ----

From: Mike Mike
Subject: Re: [SDL] SDL program crashing…

yh, I do know what an object file is.
?What I’m not sure of,is the proper way of making my .obj file
available for others.

Or
?Do you mean, I should find someone with a commercial version and make
my .obj available for them to statistically link for me?

Nope, all this means is that if you don’t want to provide source and
want to provide a statically linked binary, you can provide the object
files you used to make your binary available to those you distributed
the binary to.

This has to be in a form where if they had only SDL and the normal
development tools for the platform of that binary, they could re-make
your binary with their own SDL instead of the one you used.

Dynamically linking does this more or less automatically (one can just
replace the libsdl.so or SDL.DLL on the system, and they’ve done it),
but when statically linking, you have to take extra steps to make that
possible.

One thing that’s also commonly done is to selectively static link
things, instead of using the -static option to link everything
statically. For example, the libc on a system is generally stable (or
providing good backward compatibility), but you might want to link
your own version of libpng statically. You can do that by replacing
the -lfoo with /path/to/libfoo.a on the linker command line (although
you sometimes have to move it around, due to the way linkers look up
symbols). You can then use a dynamic SDL and comply with the license
easily.On Tue, Apr 21, 2009 at 7:32 PM, Mike Mike wrote:


http://pphaneuf.livejournal.com/

Wow! tak about ‘rules that I have to follow’. lol

Just got an email from Sam Latinga. And he said, the license only applies to
SDL-1.3 and newer.

So I’m guessing this means my problem doesn’t have anything to do with not
having the license (since I’m making use of SDL-1.2), right?

Because, I thought it’s because I don’t have a license to link statically
that’s why I’m facing this problem.

Any ideas?

Or, am I not getting something right, am I missing something?

Thanks in advance.