Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
AkiraHinoshiro
- Beiträge: 429
- Registriert: 09.10.2003 16:17:33
- Wohnort: Ilmenau
-
Kontaktdaten:
Beitrag
von AkiraHinoshiro » 14.09.2006 17:02:58
Ich wollte mein C/C++ Wissen erweitern und wollte SDL lernen, das Problem schon im ersten Programm des Tutorials ist ein fehlerhafter (veralteter?) Source Code.
Code: Alles auswählen
#include <stdlib.h>
#include <SDL/SDL.h>
int main(int argc, char *argv[])
{
if (SDL_Init(SDL_INIT_VIDEO) == -1) {
printf("Can't init SDL: %s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
SDL_Surface *screen;
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);
SDL_Quit();
return 0;
}
gcc und g++ meinen dazu:
Code: Alles auswählen
/tmp/cc0V8KiR.o: In function `main':
sdltest.cpp:(.text+0x19): undefined reference to `SDL_Init'
sdltest.cpp:(.text+0x28): undefined reference to `SDL_GetError'
sdltest.cpp:(.text+0x4b): undefined reference to `SDL_Quit'
sdltest.cpp:(.text+0x74): undefined reference to `SDL_SetVideoMode'
sdltest.cpp:(.text+0x82): undefined reference to `SDL_GetError'
sdltest.cpp:(.text+0xaa): undefined reference to `SDL_Delay'
sdltest.cpp:(.text+0xaf): undefined reference to `SDL_Quit'
/tmp/cc0V8KiR.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
-
Spasswolf
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Beitrag
von Spasswolf » 14.09.2006 17:32:46
Da muss noch 'ne Bibliothek verlinkt werden. Kompilier das ganze mal mit
-
AkiraHinoshiro
- Beiträge: 429
- Registriert: 09.10.2003 16:17:33
- Wohnort: Ilmenau
-
Kontaktdaten:
Beitrag
von AkiraHinoshiro » 14.09.2006 17:39:21
Code: Alles auswählen
# gcc -lSDL sdltest.cpp
/tmp/cc4d95j8.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
Jetzt wirds kryptisch, jetzt bin ich sogar mit der Fehlermeldung überfordert udn versteh die nich mehr.
EDIT: Ich depp, wenn ich schon c++ Sourcen erstelle, sollte ich das ganze auch mit g++ kompilieren. Danke damit funktionierts.
-
Spasswolf
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Beitrag
von Spasswolf » 14.09.2006 17:46:59
Nenne den Quelltext sdltest.c.
-
AkiraHinoshiro
- Beiträge: 429
- Registriert: 09.10.2003 16:17:33
- Wohnort: Ilmenau
-
Kontaktdaten:
Beitrag
von AkiraHinoshiro » 14.09.2006 17:54:09
Dann erklär mir bitte, warum gcc den Source nicht kompilieren konnte, g++ aber schon. Es sind zwar keine C++ eigenen Sachen, ala Headers oder Objektorientierung drin, aber g++ konnte es kompilieren. Ich weiß (noch) nicht genug über SDL, um den Part C oder C++ zuordnen zu können, ich hoffe ich verzeiht es mir. Abgesehen davon ist doch vollkommen egal wie die Datei heißt, der Aufruf ist wichtig. Linux ist halt kein Windows und von daher müsste der Dateiname nur der übersichtshalber so gewählt werden. Wenn es anders ist bitte ich um Korrektur.
EDIT: Der Dateiname ist ja doch wichtig! Das war mir neu, mir war immer so, als ob es Linux egal ist, wie eine Datei heißt und nur der Programmaufruf zu der Datei wichtig ist! Sorry da hab ich mich wohl geirrt!
-
Spasswolf
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Beitrag
von Spasswolf » 14.09.2006 18:06:08
Der gcc legt Wert auf die Endungen, und behandelt die Dateien entsprechend.
Warum sich gcc und g++ in diesm Fall unterschiedlich Handeln weiss ich auch nicht.
-
Joghurt
- Beiträge: 5244
- Registriert: 30.01.2003 15:27:31
- Wohnort: Hamburg
-
Kontaktdaten:
Beitrag
von Joghurt » 14.09.2006 18:36:32
Übrigens gibt das Programm sdl-config die benötigten Parameter aus. Man kompiliert in der Regel deshalb so:
Code: Alles auswählen
gcc programm.c -o programm $(sdl-config --cflags --libs)
Das $() führt das angegebene Programm aus und fügt die Ausgabe dieses Programmes an dieser Stelle ein.
-
rendegast
- Beiträge: 15041
- Registriert: 27.02.2006 16:50:33
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von rendegast » 15.09.2006 00:52:13
Habe diese Meldungen
........: (.text+0x4b): undefined reference to `........'
(wie kriegt man die Smilies aus solchen Zitaten?)
beim Kompilieren von Teilen des Kernel 2.6.17.13,
Nenne den Quelltext sdltest.c.
jedoch sind das alles doch *.c?
Danke für den Hinweis in diese Richtung.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
Spasswolf
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Beitrag
von Spasswolf » 15.09.2006 01:31:57
rendegast hat geschrieben:Habe diese Meldungen
........: (.text+0x4b): undefined reference to `........'
(wie kriegt man die Smilies aus solchen Zitaten?)
beim Kompilieren von Teilen des Kernel 2.6.17.13
Wenn man solche Meldungen beim Kernelkompilieren hat, dann hat man vermutlich etwas in der .config nicht aktiviert, was von einem anderen Teil des Kernels benötigt wird. Um genaueres zu sagen müsstest du deine .config und die genauen Fehlermeldungen posten. Mach am besten 'nen neuen Thread.
-
AkiraHinoshiro
- Beiträge: 429
- Registriert: 09.10.2003 16:17:33
- Wohnort: Ilmenau
-
Kontaktdaten:
Beitrag
von AkiraHinoshiro » 17.09.2006 20:54:40
Habe diese Meldungen
Zitat:
........: (.text+0x4b): undefined reference to `........'
(wie kriegt man die Smilies aus solchen Zitaten?)
beim Kompilieren von Teilen des Kernel 2.6.17.13,
Zitat:
Nenne den Quelltext sdltest.c.
jedoch sind das alles doch *.c?
Code:
gcc -.....
Danke für den Hinweis in diese Richtung.
Sorry entweder bin ich zu fertig nach dem Wochenende vom Malern und versteh den zusammenhang nicht, oder du hast dich im Beitrag vertan. Bitte um Erklärung, denn ich bin nach dem Post etwas verwirrt.