PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : libSDL Link Problem



Daywalker313
19-10-2004, 23:12
Hi,
ich wollte versuchen, mit libSDL unter FreeBSD mal ein wenig rumzuspielen.

Ich habe den Port libSDL12 installiert und soweit laufen auch SDL Programme wie tuxracer.

Jetzt habe ich eine SDL "Hello World" Demo:


#include "SDL.h"

int main(int argc, char **argv)
{
printf("\nHello SDL User!\n");

/* initialize SDL */
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
fprintf( stderr, "Video initialization failed: %s\n",
SDL_GetError( ) );
SDL_Quit( );
}

SDL_Quit( );

return 0;
}



1. Kompilieren:
gcc -c test.cpp -I/usr/local/include/SDL -D_REENTRANT -D_THREAD_SAFE (bzw. sdl-config --cflags)

2. Linken:
gcc -o test test.o -L/usr/local/lib -lSDL -pthread (bzw. sdl-config --libs)

Und hier kommen die Linkerfehler:
/usr/local/lib/libSDL.so: undefined reference to `SDL_SYS_JoystickUpdate'
/usr/local/lib/libSDL.so: undefined reference to `SDL_SYS_JoystickOpen'
/usr/local/lib/libSDL.so: undefined reference to `SDL_SYS_JoystickQuit'
/usr/local/lib/libSDL.so: undefined reference to `SDL_SYS_JoystickName'
/usr/local/lib/libSDL.so: undefined reference to `SDL_SYS_JoystickInit'
/usr/local/lib/libSDL.so: undefined reference to `SDL_SYS_JoystickClose'


Aber ansonsten geht alles, mit anderen Referenzen hat er keine Probleme.
Hat jemand ne Ahnung wodurch das Problem entstehen könnte oder ob man einfach die Joystick-Libs beim Kompilieren von libSDL aus dem Porttree deaktivieren kann?

Thx,
Daywalker

undefined
20-10-2004, 08:05
Ich weis jetzt nicht wie du dein Projekt erstellt hast.
Aber SDL muss beim erstellen des Projektes in die configure.ac oder configure.in mit aufgenommen werden.
Der Eintrag müste AM_PATH_SDL sein genaueres findest du in der Macro Datei im aclocale Verzeichnis. Danach dein Projekt mit den automake Tools neu übersetzen.
mfg undefined

Daywalker313
20-10-2004, 10:51
Ich weis jetzt nicht wie du dein Projekt erstellt hast.
Aber SDL muss beim erstellen des Projektes in die configure.ac oder configure.in mit aufgenommen werden.
Der Eintrag müste AM_PATH_SDL sein genaueres findest du in der Macro Datei im aclocale Verzeichnis. Danach dein Projekt mit den automake Tools neu übersetzen.
mfg undefined

Ich hab ja kein Projekt erstellt, sondern einfach nur im Shell mit gcc kompilieren wollen.
Es funktioniert jetzt, aber ich weiß immer noch nicht warum:

In /usr/local/lib waren einige "SDL" libraries, u.a.:


-rw-r--r-- 1 root wheel 488560 Oct 19 23:22 libSDL-1.1.a
lrwxr-xr-x 1 root wheel 15 Oct 19 23:22 libSDL-1.1.so -> libSDL-1.1.so.7
-rwxr-xr-x 2 root wheel 387749 Oct 19 23:22 libSDL-1.1.so.7
lrwxr-xr-x 1 root wheel 15 Oct 19 22:57 libSDL-1.2.so -> libSDL-1.2.so.7
-rwxr-xr-x 1 root wheel 1348805 Oct 19 22:57 libSDL-1.2.so.7
-rw-r--r-- 1 root wheel 4316114 Oct 19 22:57 libSDL.a
-rwxr-xr-x 2 root wheel 15 Oct 19 23:22 libSDL.so -> libSDL-1.2.so.7


libSDL.so war demnach mit libSDL-1.2.so.7 verlinkt.
Ich habe einfach ein "ln -f libSDL-1.1.so.7 libSDL.so" durchgeführt und die libSDL.so mit der libSDL-1.1.so.7 verbunden.

Warum das nun allerdings läuft und kompiliert weiß ich nicht, weil die Headerdateien von der Version 1.2 stammen.