Hilfe beim Cross-Compilen (Linux)


Knurz

Still Fresh
Joined
Nov 17, 2005
Messages
47
Age
52
Location
Austria
Website
Visit site
Hi!

Ich bin seit 12/05 glücklicher gp2x Besitzer :) und wollte nun mit der Entwicklung bzw. Übersetzung von 1 Game beginnen (der SDL-Port von Dungeon Master bzw. Chaos strikes back -> http://debian.frodo.looijaard.name/ ).

Leider bin ich beim Cross-Compiler einrichten bzw. mit den verbundenen Libs etwas in Schwierigkeiten geraten :confused: . Ich habe mir von http://www.scratchbox.org den ARM-GCC 3.4 geholt, der klappt einwandfrei, sowie die SDL-libs mit diesem compiler übersetzt (inkl. den libs die auf der gp2x installiert sind).

Das einzige "Demo" das einwandfrei läuft ist das "hello" demo von der Wiki bzw. von http://www.newimage.com/~rhk/gp2x/, alle anderen begrüßen mich mit einem dunklen Screen :x

Vielleicht kann mir ja ein ambitionierter Entwickler hier helfen das Problem in Griff zu bekommen, C/C++ kann ich, auch kenn ich mich nicht so schlecht mit Linux aus, aber da bin ich einfach überfragt wo das Problem liegt.

Danke schonmal im vorhinein,
Bye, Berny
 
Elektranox said:
Nicht nur die Versuche testen, sondern auch die Beschreibungen lesen!
http://wiki.gp2x.org/wiki/SDL_FAQ

Hi!

Also ich nehm doch an das das "Hello Pixel" von der wiki.gp2x.org schonmal wo getestet wurde, leider bleibts bei dem auch schwarz ..

Wie gesagt von http://wiki.gp2x.org/wiki/Writing_an_SDL_Hello_World das "Hello Pixel" zwar erfolgreich compiled, jedoch shiced mir die gp2x was .. :twisted:
 
Elektranox said:
die beiden Testprogramme aus der Wiki hab ich selbst getestet und die gehen einwandfrei...das liegt wohl eher an deiner Compiler Umgebung...hast du vieleicht doch den gcc für deinen PC aufgerufen statt dem für die GP2X?

Mhh nein das kanns nicht sein, ich hab mir extra ein jailed-Environment (www.scratchbox.org) downgeloaded damit das nicht passiert.

Auch die Ausgabe von "file"scheint imo zu passen:
[sbox-gp2x: ~/demos/bin] > file hello.gpe
hello.gpe: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), stripped

Das ist der Compiler den ich dafür nutze:
[sbox-gp2x: ~] > gcc --version
sbox-arm-linux-gcc (GCC) 3.4.2 (release) (CodeSourcery ARM Q3D 2004)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Danke für Deine Hilfe ^_^
 
Elektranox said:
Hast du auf deinem GP2X die Libarys denn installiert?

Ja, Games emus etc. klappen alle wunderbar.
( War dieser Release: http://archive.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,31,869 der SDL-Libs)
 
start mal mir sTerm und dann so:"./progname > output.txt" dann wird die Konsolenausgabe die du ja nicht siehst nach ouput.txt weitergeleitet.

Außerdem solltest du immer am PC mit "--wall" kompilieren, das gibt dir auch Meldungen aus, die sonst übersprungen werden.

Sehr warscheinlich liegts aber an deinem Compiler/SDL am PC, da das Testprog bei mir geht und ich die gleiche SDL Libary auf meiner GP2X verwende ;)
 
Elektranox said:
start mal mir sTerm und dann so:"./progname > output.txt" dann wird die Konsolenausgabe die du ja nicht siehst nach ouput.txt weitergeleitet.

Außerdem solltest du immer am PC mit "--wall" kompilieren, das gibt dir auch Meldungen aus, die sonst übersprungen werden.

Sehr warscheinlich liegts aber an deinem Compiler/SDL am PC, da das Testprog bei mir geht und ich die gleiche SDL Libary auf meiner GP2X verwende ;)

Ja -Wall mach ich, -O2 hab ich aus sicherheitsgründen mal weggelassen.

Hab jetzt von den demos das hello.c nochmals compiliert, aber anders als überall angegeben wurde nämlich mit shared libs, nicht mit static.

Siehe da es geht...

Wollte dann noch die SDL_ttf ausprobieren (ist ja auch mitinstalliert), mit dem Sinusfont.c von libsdl.org, das hat aber nicht geklappt...

Auch hat das fountain.cc von der demo-"collection" für die gp2x nicht geklappt leider.

Na da werd ich mich noch etwas damit beschäftigen müssen bis es so läuft wie gewünscht..

Danke auf jeden Fall mal für Deine Hilfe, der erste Schritt ist damit getan ;)

p.s.: Die Umleitung auf output.txt hat so nicht funktioniert.
K.a. ob stdout ganz "normal" funktioniert wie unter Linux, SDL scheint da auch nicht sehr gesprächig zu sein.
 
Hmmm... vermutlich wie bei anderen und bei mir: Du musst die SDL_Libs statisch linken. Option -lstatic beim Makefile.

Die SDL-Libs des GP2X passen wohl nicht ganz zu denen auf deinem Linux...

Sag mal, obs daran liegt...

Greetz
BNrXYZ
 
Hi.

Ich hab jetzt mal die Libs gp2x <-> linux verglichen, scheinen von der selben Version zu sein, hab aber sicherheitshalber SDL (1.2.9) neu compiled mit folgenden options:
./configure --enable-static --prefix=/opt/arm-linux/ --disable-rpath --disable-video-ps2gs --disable-mintaudio --disable-directx

So hab ich dann das "hello.c" übersetzt:
gcc `/opt/arm-linux/bin/sdl-config --cflags` -c -o hello.o hello.c
gcc -static hello.o `/opt/arm-linux/bin/sdl-config --static-libs` -o hello.gpe

Wie üblich kein Bild auf der gp2x :(

Hier noch die Libs die in dem jailed Environment installiert sind:
[sbox-gp2x: /opt/arm-linux/lib] > ls -la libSDL*
lrwxrwxrwx 1 bernhard bernhard 19 Jan 20 08:04 libSDL-1.2.so.0 -> libSDL-1.2.so.0.7.2
-rwxr-xr-x 1 bernhard bernhard 717675 Jan 20 08:04 libSDL-1.2.so.0.7.2
-rw-r--r-- 1 bernhard bernhard 1142484 Jan 20 08:04 libSDL.a
-rwxr-xr-x 1 bernhard bernhard 820 Jan 20 08:04 libSDL.la
lrwxrwxrwx 1 bernhard bernhard 19 Jan 20 08:04 libSDL.so -> libSDL-1.2.so.0.7.2
lrwxrwxrwx 1 bernhard bernhard 25 Jan 19 08:49 libSDL_image-1.2.so.0 -> libSDL_image-1.2.so.0.1.3
-rwxr-xr-x 1 bernhard bernhard 175783 Jan 19 08:49 libSDL_image-1.2.so.0.1.3
-rw-r--r-- 1 bernhard bernhard 156184 Jan 19 08:49 libSDL_image.a
-rwxr-xr-x 1 bernhard bernhard 952 Jan 19 08:49 libSDL_image.la
lrwxrwxrwx 1 bernhard bernhard 25 Jan 19 08:49 libSDL_image.so -> libSDL_image-1.2.so.0.1.3
lrwxrwxrwx 1 bernhard bernhard 25 Jan 19 09:17 libSDL_mixer-1.2.so.0 -> libSDL_mixer-1.2.so.0.2.4
-rwxr-xr-x 1 bernhard bernhard 228752 Oct 17 18:24 libSDL_mixer-1.2.so.0.2.4
-rw-r--r-- 1 bernhard bernhard 905160 Jan 19 09:17 libSDL_mixer.a
-rwxr-xr-x 1 bernhard bernhard 958 Jan 19 09:17 libSDL_mixer.la
lrwxrwxrwx 1 bernhard bernhard 25 Jan 19 09:17 libSDL_mixer.so -> libSDL_mixer-1.2.so.0.2.4
lrwxrwxrwx 1 bernhard bernhard 23 Jan 19 11:05 libSDL_ttf-2.0.so.0 -> libSDL_ttf-2.0.so.0.6.1
-rwxr-xr-x 1 bernhard bernhard 25296 Oct 17 18:24 libSDL_ttf-2.0.so.0.6.1
-rw-r--r-- 1 bernhard bernhard 54044 Jan 19 11:05 libSDL_ttf.a
-rwxr-xr-x 1 bernhard bernhard 955 Jan 19 11:05 libSDL_ttf.la
lrwxrwxrwx 1 bernhard bernhard 23 Jan 19 11:05 libSDL_ttf.so -> libSDL_ttf-2.0.so.0.6.1
-rw-r--r-- 1 bernhard bernhard 1012 Jan 20 08:04 libSDLmain.a

Danke für eure Hilfe,
Berny
 
Zeig doch mal den Teil deines Programmes, wo du den Videobereich initialisierst...

Greetz
BNrXYZ
 
Hi.

Hier gleich das ganze Proggy:


#include <unistd.h>

#include "SDL.h"

#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define SCREEN_DEPTH 16

int main (int argc, char **argv)
{
SDL_Surface *screen;
SDL_Joystick *joy;
Uint16 *p;
int x = 10; //x coordinate of our pixel
int y = 20; //y coordinate of our pixel
int done = 0;
int quit_armed = 0;

/* Initialize SDL */
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0)
return 1;

/* Initialize the screen / window */
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
if (screen == NULL)
return 1;

/* Make p point to the place we want to draw the pixel */
p = (Uint16 *) (screen->pixels + y * screen->pitch + x * screen->format->BytesPerPixel);

/* Draw the pixel! */
*p = 0xFFFF;

/* update the screen (aka double buffering) */
SDL_Flip (screen);

joy = SDL_JoystickOpen(0);
while (!done)
{
SDL_Event event;

SDL_WaitEvent(&event);

switch (event.type)
{
case SDL_JOYBUTTONDOWN:
if (joy)
{
if (SDL_JoystickGetButton(joy, 8))
quit_armed = 1;
}
break;
case SDL_JOYBUTTONUP:
if (joy)
{
if (quit_armed && !SDL_JoystickGetButton(joy, 8))
done = 1;
}
break;
case SDL_KEYDOWN:
case SDL_QUIT:
done = 1;
break;
}
}
SDL_Quit();
chdir("/usr/gp2x");
execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
return 1;
}
 
kann sein das ich mich irre, aber ich meine mich zu erinnern das Double Buffering nicht geht beim GP2x...

d.h. der Teil wäre das Problem:

/* update the screen (aka double buffering) */
SDL_Flip (screen);


kann aber auch sein das ich das verwechsle mit was andrem.... :confused:
 
Spearhead said:
kann sein das ich mich irre, aber ich meine mich zu erinnern das Double Buffering nicht geht beim GP2x...

d.h. der Teil wäre das Problem:

/* update the screen (aka double buffering) */
SDL_Flip (screen);


kann aber auch sein das ich das verwechsle mit was andrem.... :confused:

Das ist eigentlich das "Hello-World" Programm von wiki.gp2x.org.. hoffe doch das das inhaltlich richtig ist :)
 
Elektranox said:
Ne es geht darum, dass der das beim init nicht haben darf...Das ganze ist
Hier nachlesbar ;)

aber What definitely won't work :

* 16bpp, SDL_DOUBLEBUF | SDL_SWSURFACE


hat ja nix mit dem hier gezeigten beispiel zu tun..

Ich build mir jetzt von scratch die arm-linux-gnu umgebung und werd dann die SDL libs mal so testen, MUSS klappen :)
 
Back
Top