Problem mit SDL-Funktionen

Odzilla

Grünschnabel
Hi,

Habe mir vorhin die SDL-Bibliotheken für Linux runtergeladen und wollte als erstes mal das Beispielprogramm für die Initialisierung der Biblitheken Compilieren.

Der Quelltext:
Code:
#include <stdlib.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[])
{
    SDL_Surface *screen;
    if(SDL_Init(SDL_INIT_VIDEO) == -1)
    {
        printf("Can't init SDL:  %s\n", SDL_GetError());
        exit(1);
    }
    atexit(SDL_Quit);
    screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE);
    if(screen == NULL)
    {
        printf("Can't set video mode: %s\n", SDL_GetError());
        exit(1);
    }
    SDL_Delay(3000);
    return 0;
}

Soweit sogut, aber ich bekomme beim compilieren immer folgende Fehlermeldungen:
Code:
odzilla@zilla:~/c> make grafik1
cc     grafik1.c   -o grafik1
grafik1.c:21:2: warning: no newline at end of file
/tmp/cciKiR3w.o(.text+0x16): In function `main':
: undefined reference to `SDL_Init'
/tmp/cciKiR3w.o(.text+0x29): In function `main':
: undefined reference to `SDL_GetError'
/tmp/cciKiR3w.o(.text+0x4c): In function `main':
: undefined reference to `SDL_Quit'
/tmp/cciKiR3w.o(.text+0x67): In function `main':
: undefined reference to `SDL_SetVideoMode'
/tmp/cciKiR3w.o(.text+0x7e): In function `main':
: undefined reference to `SDL_GetError'
/tmp/cciKiR3w.o(.text+0xa6): In function `main':
: undefined reference to `SDL_Delay'
collect2: ld returned 1 exit status
make: *** [grafik1] Fehler 1

Hab schon einiges ausprobiert und die Dokumentation gelesen, hab aber keine Lösung auf das Problem gefunden.

Hat jemand vielleicht eine Idee, was der Fehler ist ?
 
Ich denke schon.

In den FAQ stand, dass man die in die Datei /etc/ld.so.conf den Pfad /usr/local/lib eintragen soll. Des hab ich auch gemacht.
 
Damit kenne ich mich nicht aus. Ich kenne SDL nur in Kombination mit MSVC++, aber dein Problem hört sich an, als würde der Linker den Code für die SDL-Funktionen nicht finden, deshalb meine Frage.
 
Ja, des glaub ich auch, aber ich kanns mir nicht erklären :(

Muss man die Bibliotheken vielleicht noch anders einbinden ?
 
Also ich hab etwas Erfahrungen mit SDL unter Linux, da ich selbst ein Projekt damit mache.
Du benötigst auf alle Fälle neben den SDL runtime Libs auch die devel-libs (also die Entwicklungsversion der SDL, um die Libs mit deinem Programm zusammen zu linken, evtl. postest du auch mal das Makefile.

Gruß Homer
 
Die Devel-Libs hab ich.
Mit makefiles kenn ich mich nicht aus.
Hab bisher auch keine gebraucht, hab immer mim Texteditor die Sourcefile geschrieben und dann mit gcc compiliert ;)

Habs jetzt mal mit KDevelop versucht, des hat ne Makefile erstellt:
Code:
####### kdevelop will overwrite this part! (begin)##########

SUBDIRS = grafik1

EXTRA_DIST = grafik1.kdevprj admin AUTHORS COPYING ChangeLog INSTALL README TODO grafik1.lsm

####### kdevelop will overwrite this part! (end)############
# not a GNU package. You can remove this line, if
# have all needed files, that a GNU package needs
AUTOMAKE_OPTIONS = foreign

$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
	cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;

$(top_srcdir)/subdirs:
	cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs

$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/special.m4.in $(top_srcdir)/admin/libtool.m4.in
	@cd $(top_srcdir) && cat admin/acinclude.m4.in special.m4.in admin/libtool.m4.in > acinclude.m4

MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files

package-messages:
	$(MAKE) -f admin/Makefile.common package-messages

dist-hook:
	cd $(top_distdir) && perl admin/am_edit -padmin
	cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs

Ach ja, muss man die libs vielleicht irgendwo bei den Einstellungen von KDevelop noch eintragen ?
Bei MSVC++ musste man die DirectX Libs auch speziell eintragen.
 
Zuletzt bearbeitet:
Als das was du da geschickt hast ist für Automake gedacht denke ich. Ich weiß nicht ich nehme Kdevelop nur mit selbst gebauten Makefiles da ich eine völlig eigene Sourcestruktur habe und kein Automake benutzen will.
Versuch das beispiel doch direkt über die Konsole zu kompilieren und zu linken:
Code:
zuerst kompilieren:
# gcc -c grafik1.c  -o grafik1.o

dann linken:
# gcc -o grafik -L/usr/lib -lSDL

Das sollte funktionieren.
Wenn du das allerdings mit Kdevelop machen willst, dann musst du natürlich Kdevelop sagen, das er die Libs dazulinken soll.

Gruß Homer
 
Erstma Danke für die Tips.

Leider gibts immer noch Fehler beim linken :(
Code:
odzilla@zilla:~/c> gcc -c grafik1.c -o grafik1.o
grafik1.c:21:2: warning: no newline at end of file

odzilla@zilla:~/c> gcc -o grafik1 -L/usr/lib -lSDL
/usr/lib/gcc-lib/i486-suse-linux/3.3/../../../crt1.o(.text+0x18): In function `_start':
: undefined reference to `main'
collect2: ld returned 1 exit status

Habs auch mit KDevelop versucht, hab aber keine Ahnung wo man da die Libs eintragen muss :-(
Hab sie einfach mal wo eingetragen, was danach aussah ging aber nich :(
 
Versuch mal das hier, um die zusätzliche Lib noch dazu zulinken, vielleicht geht es dann
Code:
zuerst kompilieren:
# gcc -c grafik1.c  -o grafik1.o

dann linken:
# gcc -o grafik -L/usr/lib -lSDL -lpthread

Gruß Homer
 
Zurück