PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SDL: undefined reference



mcleod
22-03-2004, 19:09
Hallo Foum,

dies ist mein erstes Posting hier und ich hoffe ihr könnt mir etwas helfen.
Erstmal vorweg: Ich bin recht unerfahren in Linux (ein weiterer Win-Flüchtling) und kenne mich mit C-Programmierung auch nicht gut aus, bzw. bin gerade dabei seit vielen Jahren wieder damit anzufangen.
Ich benutze Mandrake 9.1 und mache meine ersten Gehversuche mit KDevelop. Außerdem schnuppere ich gerade etwas in SDL hinein.
Ich wollte folgendes Progrämmchen (zum Lernen und Üben) compilieren, doch dabei schon eine erste Fehlermeldung.. Ich habe natürlich danach schon gesucht und die Fehlermeldung auch schon öfters gefunden, aber nirgendwo war eine Lösung für mich dabei.
Ich denke, ich habe alle Pakete die mit SDL zu tun haben installiert.
Hier das Programm:

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[])
{
SDL_Event ereignis;

while ( SDL_PollEvent(&ereignis) )
{
switch (ereignis.type)
{
case SDL_MOUSEMOTION:
printf("Die Maus wurde um %d,%d Pixel nach (%d,%d) bewegt.\n",
ereignis.motion.xrel, ereignis.motion.yrel,
ereignis.motion.x, ereignis.motion.y);
break;
case SDL_MOUSEBUTTONDOWN:
printf("Die Maustaste Nummer %d wurde bei (%d,%d) gedrückt.\n",
ereignis.button.button, ereignis.button.x, ereignis.button.y);
break;
case SDL_QUIT:
exit(0);
}
}

return EXIT_SUCCESS;
}

Die genaue Fehlermeldung ist:

gmake all-recursive
gmake[1]: Entering directory `/home/leod/Programme/SDL/test/event_watch'
Making all in event_watch
gmake[2]: Entering directory `/home/leod/Programme/SDL/test/event_watch/event_watch'
gcc -DHAVE_CONFIG_H -I. -I. -I.. -O2 -O0 -g3 -Wall -c main.c
/bin/sh ../libtool --mode=link gcc -O2 -O0 -g3 -Wall -o event_watch main.o
gcc -O2 -O0 -g3 -Wall -o event_watch main.o
main.o(.text+0x18): In function `main':
/home/leod/Programme/SDL/test/event_watch/event_watch/main.c:30: undefined reference to `SDL_PollEvent'
collect2: ld returned 1 exit status
gmake[2]: Leaving directory `/home/leod/Programme/SDL/test/event_watch/event_watch'
gmake[2]: *** [event_watch] Fehler 1
gmake[1]: *** [all-recursive] Fehler 1
gmake[1]: Leaving directory `/home/leod/Programme/SDL/test/event_watch'
gmake: *** [all-recursive-am] Fehler 2
*** failed ***

Hoffe auf viele Vorschläge, viele Grüße

leod

axeljaeger
22-03-2004, 19:18
In KDevelop muss es irgendwo in deinen Projekteinstellungen ein Feld Linkerflags geben. Da folgendes reinschreiben:
`sdl-config --libs`

mcleod
22-03-2004, 20:25
Im Menü Projects/Options unter Compiler-Options gibt es eine Karteikarte 'Linker Flags'. Dort habe ich in das Feld Additional Flags das eingetragen:
sdl-config --libs
Nach OK kommen diese Compiler-Meldungen:

Running configure in source directory
loading cache ./config.cache
checking host system type... i386-pc-linux-gnu
checking target system type... i386-pc-linux-gnu
checking build system type... i386-pc-linux-gnu
checking for a BSD compatible install... (cached) /usr//bin/install -c
checking for -p flag to install... yes
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... (cached) yes
checking for working aclocal-1.4... found
checking for working autoconf... found
checking for working automake-1.4... found
checking for working autoheader... found
checking for working makeinfo... found
checking for gcc... (cached) gcc
checking whether the C compiler (gcc -O0 -g3 -Wall sdl-config --libs) works... no
configure: error: installation or configuration problem: C compiler cannot create executables.
*** failed ***
Und beim Compilieren kommt immernoch der gleiche Fehler. Da muss wohl doch noch etwas anderes falsch eingestellt sein bei mir oder warum kann der Compiler keine executables machen?
Aber Hello World konnte ich eben aber auch compilieren...

undefined
23-03-2004, 10:35
Bitte auch sein Beispielvorgabe so annehmen wie er es geschrieben hat. ;)
An sonsten in der Console ausführen und das ergebnis in KDevelop einfügen.

axeljaeger
23-03-2004, 14:18
Ich hab noch Hochkommata drum "`": Shift und die Taste neben Backspace. sdl-config ist ein Befehl, kannst du mal in der Konsole ausführen, da sollten dann die entsprechenden Flags erscheinen. Mit den Hochkommata sage ich KDevelop, es möge den Befehl ausführen und stattdessen den Output des Befehls einfügen.

mcleod
23-03-2004, 14:45
Vielen Dank, compilieren klappt jetzt :)

Doch habe ich wohl mit den SDL-Funktionen Probleme. Keiner der Beispiele auf der http://www.libsdl.org/ Seite funktioniert bei mir (zB die Funktion oben).
Alle lassen sich in einbauen und compilieren aber wenn ich in KDevelop den Run-Befehl ausführe, erscheint nur ein leeres Konsolenfenster, das ich dann nur noch mit Return schließen kann. Kein Text, keine Eingabe funktoniert. Auch die fertige Version startet nicht, wenn ich sie auf der Konsole starte - dort erscheint dann gar nichts.

Wenn ihr Lust habt, gebt mir doch mal einen Tipp, woran das liegen könnte. Und außerdem suche ich noch eine gute Anleitung für SDL-Anfänger im Netz. Hat jemand einen Tipp?

Schönen Gruß,
leod

axeljaeger
23-03-2004, 16:20
Was passiert genau, wenn du ein SDL-Programm startest? In der Konsole etwa: Erscheint da einfach nichts, das Programm läuft aber weiter, oder beendet es sich sofort? Oder erscheint ein leeres schwarzes Fenster(gutes Zeichen)?

mcleod
23-03-2004, 20:25
Wenn ich im Compiler auf Run klicke, erscheint ein bash-Fenster in dem nur Press Enter to continue steht.
Und wenn ich meine fertig compilierten Mini-Programme in der Konsole starte, erscheint gar nichts - auch kein neues Bash-Fenster. Einfach nur die nächste Eingabeaufforderung, sonst auch keine Meldung.