Ich krieg keine Toolchain mehr zusammen :(


Ziz

Advanced Member
Joined
Jan 15, 2006
Messages
3,584
Abend,

vor kurzem habe ich es geschafft mein Linux zu schrotten. Wie sei mal dahingestellt. Auf jedenfall ging auch meine GP2X-Toolchain drauf. Nun wollte ich mir eine neue erstellen. Dazu haben sie mir 4 Wege aufgetan.

1. Open2X Toolchain
2. Die Toolchain von dev.gp2x.de
3. Die offizielle Toolchain von GPH
4. Die gepatchtet DevKitPro Toolchain

Nur will keine richtig funktionieren. :(

Zu 1. Bei der Open2x Toolchain sagt er mir, dass mein Programm Software FP nutzen würde und die Bibliothek XYZ Hardware FP und das für alle libs. Nunja, Open2X is eh nicht so wichtig. Ich war mit meiner veralteten Original-GPH Toolchain ja ganz zufrieden.

2. Die Toolchain lässt sich installieren, aber wenn ich das etwas kompiliere, gibt mir sterm aus, dass dynamisch gelinkte Bilbiotheken fehlen würde. Soweit ja nicht schlimm, nur kriege ich statisch linken nicht gebacken.
Folgender Kompiliercode:
Code:
<i>
</i>/usr/local/gp2xdev/gp2x/bin/g++ -static -D_REENTRANT -DGP2X -w
-I/usr/local/gp2xdev/gp2x/include
-I/usr/local/gp2xdev/include
-I/usr/local/gp2xdev/include/SDL
-o /media/hda9/gp2x/car/car.gpe/media/hda9/gp2x/car/main.c
-L/usr/local/gp2xdev/gp2x/lib 
-L/usr/local/gp2xdev/lib
-lpthread -lSDL_image -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lpng
-ljpeg -lvorbisidec -lmad -lfreetype -lsmpeg -lz
ergibt folgende Fehler:
Code:
<i>
</i>/usr/local/gp2xdev/lib/libSDL.a(SDL_systhread.o): In function `RunThread':
SDL_systhread.c:(.text+0xc): undefined reference to `pthread_exit'
/usr/local/gp2xdev/lib/libSDL.a(SDL_systhread.o): In function `SDL_SYS_CreateThread':
SDL_systhread.c:(.text+0x2c): undefined reference to `pthread_attr_init'
SDL_systhread.c:(.text+0x40): undefined reference to `pthread_attr_setdetachstate'
SDL_systhread.c:(.text+0x58): undefined reference to `pthread_create'
/usr/local/gp2xdev/lib/libSDL.a(SDL_systhread.o): In function `SDL_SYS_SetupThread':
SDL_systhread.c:(.text+0xe8): undefined reference to `pthread_sigmask'
SDL_systhread.c:(.text+0xf4): undefined reference to `pthread_setcanceltype'
/usr/local/gp2xdev/lib/libSDL.a(SDL_systhread.o): In function `SDL_ThreadID':
SDL_systhread.c:(.text+0x124): undefined reference to `pthread_self'
/usr/local/gp2xdev/lib/libSDL.a(SDL_systhread.o): In function `SDL_SYS_WaitThread':
SDL_systhread.c:(.text+0x130): undefined reference to `pthread_join'
/usr/local/gp2xdev/lib/libSDL.a(SDL_systhread.o): In function `SDL_SYS_KillThread':
SDL_systhread.c:(.text+0x138): undefined reference to `pthread_cancel'
/usr/local/gp2xdev/lib/libSDL.a(SDL_sysmutex.o): In function `SDL_CreateMutex':
SDL_sysmutex.c:(.text+0x2c): undefined reference to `pthread_mutexattr_init'
SDL_sysmutex.c:(.text+0x38): undefined reference to `pthread_mutexattr_setkind_np'
SDL_sysmutex.c:(.text+0x44): undefined reference to `pthread_mutex_init'
/usr/local/gp2xdev/lib/libSDL.a(SDL_sysmutex.o): In function `SDL_DestroyMutex':
SDL_sysmutex.c:(.text+0x94): undefined reference to `pthread_mutex_destroy'
/usr/local/gp2xdev/lib/libSDL.a(SDL_sysmutex.o): In function `SDL_mutexP':
SDL_sysmutex.c:(.text+0xb8): undefined reference to `pthread_mutex_lock'
/usr/local/gp2xdev/lib/libSDL.a(SDL_sysmutex.o): In function `SDL_mutexV':
SDL_sysmutex.c:(.text+0x118): undefined reference to `pthread_mutex_unlock'
/usr/local/gp2xdev/lib/libSDL.a(SDL_syssem.o): In function `SDL_CreateSemaphore':
SDL_syssem.c:(.text+0x30): undefined reference to `sem_init'
/usr/local/gp2xdev/lib/libSDL.a(SDL_syssem.o): In function `SDL_DestroySemaphore':
SDL_syssem.c:(.text+0x88): undefined reference to `sem_destroy'
/usr/local/gp2xdev/lib/libSDL.a(SDL_syssem.o): In function `SDL_SemTryWait':
SDL_syssem.c:(.text+0xb8): undefined reference to `sem_trywait'
/usr/local/gp2xdev/lib/libSDL.a(SDL_syssem.o): In function `SDL_SemWait':
SDL_syssem.c:(.text+0x100): undefined reference to `sem_wait'
/usr/local/gp2xdev/lib/libSDL.a(SDL_syssem.o): In function `SDL_SemValue':
SDL_syssem.c:(.text+0x1e0): undefined reference to `sem_getvalue'
/usr/local/gp2xdev/lib/libSDL.a(SDL_syssem.o): In function `SDL_SemPost':
SDL_syssem.c:(.text+0x220): undefined reference to `sem_post'
/usr/local/gp2xdev/lib/libSDL_mixer.a(mixer.o): In function `Mix_LoadWAV_RW':
mixer.c:(.text+0x26c): undefined reference to `SDL_LoadWAV_RW'
mixer.c:(.text+0x320): undefined reference to `SDL_FreeWAV'
mixer.c:(.text+0x3d8): undefined reference to `SDL_FreeWAV'
mixer.c:(.text+0x410): undefined reference to `SDL_FreeWAV'
/usr/local/gp2xdev/lib/libSDL_mixer.a(mixer.o): In function `mix_channels':
mixer.c:(.text+0x23d8): undefined reference to `SDL_MixAudio'
mixer.c:(.text+0x2548): undefined reference to `SDL_MixAudio'
/usr/local/gp2xdev/lib/libSDL_mixer.a(music_ogg.o): In function `OGG_playAudio':
music_ogg.c:(.text+0x12c): undefined reference to `SDL_MixAudio'
/usr/local/gp2xdev/lib/libSDL_mixer.a(wavestream.o): In function `WAVStream_PlaySome':
wavestream.c:(.text+0x1b4): undefined reference to `SDL_MixAudio'
/usr/local/gp2xdev/lib/libsmpeg.a(mpegtoraw.lo): In function `Play_MPEGaudio(MPEGaudio*, unsigned char*, int)':
mpegtoraw.cpp:(.text+0xa84): undefined reference to `SDL_MixAudio'
/usr/local/gp2xdev/lib/libsmpeg.a(mpegtoraw.lo):mpegtoraw.cpp:(.text+0xb44): more undefined references to `SDL_MixAudio' follow
/usr/local/gp2xdev/lib/libsmpeg.a(MPEGvideo.lo): In function `MPEGvideo::~MPEGvideo()':
MPEGvideo.cpp:(.text+0x3f4): undefined reference to `SDL_FreeYUVOverlay'
/usr/local/gp2xdev/lib/libsmpeg.a(MPEGvideo.lo): In function `MPEGvideo::~MPEGvideo()':
MPEGvideo.cpp:(.text+0x45c): undefined reference to `SDL_FreeYUVOverlay'
/usr/local/gp2xdev/lib/libsmpeg.a(MPEGvideo.lo): In function `MPEGvideo::~MPEGvideo()':
MPEGvideo.cpp:(.text+0x4bc): undefined reference to `SDL_FreeYUVOverlay'
/usr/local/gp2xdev/lib/libsmpeg.a(MPEGvideo.lo): In function `MPEGvideo::SetDisplay(SDL_Surface*, SDL_mutex*, void (*)(SDL_Surface*, int, int, unsigned int, unsigned int))':
MPEGvideo.cpp:(.text+0x7dc): undefined reference to `SDL_FreeYUVOverlay'
MPEGvideo.cpp:(.text+0x7f8): undefined reference to `SDL_CreateYUVOverlay'
/usr/local/gp2xdev/lib/libsmpeg.a(MPEGvideo.lo): In function `MPEGvideo::SetDisplayRegion(int, int, int, int)':
MPEGvideo.cpp:(.text+0x9c0): undefined reference to `SDL_FreeYUVOverlay'
MPEGvideo.cpp:(.text+0x9d4): undefined reference to `SDL_CreateYUVOverlay'
/usr/local/gp2xdev/lib/libsmpeg.a(gdith.lo): In function `MPEGvideo::DisplayFrame(vid_stream*)':
gdith.cpp:(.text+0x20): undefined reference to `SDL_LockYUVOverlay'
gdith.cpp:(.text+0x1ec): undefined reference to `SDL_DisplayYUVOverlay'
gdith.cpp:(.text+0x22c): undefined reference to `SDL_UnlockYUVOverlay'
/usr/local/gp2xdev/gp2x/lib/libstdc++.a(eh_alloc.o):(.rodata._ZZ18__gthread_active_pvE20__gthread_active_ptr+0x0): undefined reference to `pthread_cancel'
/usr/local/gp2xdev/gp2x/lib/libstdc++.a(eh_alloc.o): In function `__cxa_free_exception':
/usr/local/gp2xdev/toolchain/gcc-4.0.2/build-gp2x-c++/gp2x/libstdc++-v3/include/gp2x/bits/gthr-default.h:528: undefined reference to `pthread_mutex_unlock'
/usr/local/gp2xdev/toolchain/gcc-4.0.2/build-gp2x-c++/gp2x/libstdc++-v3/include/gp2x/bits/gthr-default.h:510: undefined reference to `pthread_mutex_lock'
/usr/local/gp2xdev/gp2x/lib/libstdc++.a(eh_alloc.o): In function `__cxa_allocate_exception':
../../../../libstdc++-v3/libsupc++/eh_alloc.cc:110: undefined reference to `pthread_mutex_unlock'
../../../../libstdc++-v3/libsupc++/eh_alloc.cc:110: undefined reference to `pthread_mutex_lock'
/usr/local/gp2xdev/gp2x/lib/libstdc++.a(eh_globals.o):(.rodata._ZZ18__gthread_active_pvE20__gthread_active_ptr+0x0): undefined reference to `pthread_cancel'
/usr/local/gp2xdev/lib/gcc/gp2x/4.0.2/libgcc.a(unwind-sjlj.o): In function `fc_key_init_once':
unwind-sjlj.c:(.text+0xc8): undefined reference to `pthread_cancel'
/usr/local/gp2xdev/lib/gcc/gp2x/4.0.2/libgcc.a(unwind-sjlj.o):(.data.rel.ro+0x0): undefined reference to `pthread_cancel'
collect2: ld returned 1 exit status
make: *** [gp2x] Fehler 1
Könnte ihr mir sagen, was g++ hören will, damit alles statisch gelinkt wird?

Und zu den letzten beiden Varianten:
Die kann ich nichtmal kompilieren. Bei beiden bricht er ab mit einer Fehlermeldung, dir mir kaum was sagt:
bei 3.
Code:
make[2]: Betrete Verzeichnis '/gp2xsdk/Tools/src/glibc-2.2.5/csu'
arm-gp2x-linux-gcc version.c -c -O2 -Wall -Winline -Wstrict-prototypes -Wwrite-strings -g      -I../include -I. -I/gp2xsdk/Tools/build/gp2x/glibc/csu -I.. -I../libio  -I/gp2xsdk/Tools/build/gp2x/glibc -I../sysdeps/arm/elf -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/arm -I../sysdeps/unix/sysv/linux/arm -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/arm -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/arm/fpu -I../sysdeps/arm -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic  -nostdinc -isystem /gp2xsdk/Tools/lib/gcc/arm-gp2x-linux/3.4.6/include -isystem /gp2xsdk/Tools/kernel/linux-2.4.25-gp2x/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h     -DHAVE_INITFINI -o /gp2xsdk/Tools/build/gp2x/glibc/csu/version.o
In file included from version.c:32:
/gp2xsdk/Tools/build/gp2x/glibc/csu/version-info.h:1: error: missing terminating " character
/gp2xsdk/Tools/build/gp2x/glibc/csu/version-info.h:2: error: missing terminating " character
/gp2xsdk/Tools/build/gp2x/glibc/csu/version-info.h:3: error: missing terminating " character
/gp2xsdk/Tools/build/gp2x/glibc/csu/version-info.h:4: error: missing terminating " character
version.c:36: error: syntax error before string constant
make[2]: *** [/gp2xsdk/Tools/build/gp2x/glibc/csu/version.o] Fehler 1
make[2]: Verlasse Verzeichnis '/gp2xsdk/Tools/src/glibc-2.2.5/csu'
make[1]: *** [csu/subdir_lib] Fehler 2
make[1]: Verlasse Verzeichnis '/gp2xsdk/Tools/src/glibc-2.2.5'
make: *** [all] Fehler 2
Error : Failed building glibc
und bei 4.
Code:
<i>
</i>[...]
../linuxthreads/sysdeps/unix/sysv/linux/bits/local_lim.h:36:26: error: linux/limits.h: No such file or directory
make[2]: Verlasse Verzeichnis '/home/alexander/gp2xsdk/glibc-2.3.5/csu'
make[1]: *** [csu/subdir_lib] Fehler 2
make[1]: Verlasse Verzeichnis '/home/alexander/gp2xsdk/glibc-2.3.5'
make: *** [all] Fehler 2
Error building glibc
Könnt ihr mir bei einem Problem helfen?

mfG Cyberpuer

Edit: Hey, ich habe es geschafft mit der Toolchain von dev.gp2x.de etwas statisch zu kompileren:
Code:
/usr/local/gp2xdev/gp2x/bin/g++ -O2 -D_REENTRANT -DGP2X -w -I/usr/local/gp2xdev/gp2x/include -I/usr/local/gp2xdev/include -I/usr/local/gp2xdev/include/SDL -o /media/hda9/gp2x/car/car.gpe /media/hda9/gp2x/car/main.c -L/usr/local/gp2xdev/gp2x/lib -L/usr/local/gp2xdev/lib -static -lSDL_image -lSDL_mixer -lSDL_ttf -lpng -ljpeg -lvorbisidec -lmad -lfreetype -lsmpeg -lz -lSDL -lpthread
Es lag wohl an der Reihenfolge der libs. Nun habe ich aber ein neues Problem. Früher waren meine Programme recht klein, nun sind sie 2,4 MB groß. :( Wenn ich probiere nur eines statisch zu linken (der GP2X vermisste nur die smpeg-lib, glaube ich)
Code:
	/usr/local/gp2xdev/gp2x/bin/g++ -O2 -D_REENTRANT -DGP2X -w -I/usr/local/gp2xdev/gp2x/include -I/usr/local/gp2xdev/include -I/usr/local/gp2xdev/include/SDL -o /media/hda9/gp2x/car/car.gpe /media/hda9/gp2x/car/main.c -L/usr/local/gp2xdev/gp2x/lib -L/usr/local/gp2xdev/lib -lSDL_image -lSDL_mixer -lSDL_ttf -lpng -ljpeg -lvorbisidec -lmad -lfreetype -static -lsmpeg -dynamic -lz -lSDL -lpthread
bringt mir das nur ca. 20 neue Dateien, die alles main heißen, verschiedene Endungen haben und bis zu 2 MB groß sind und eine neue 2,4 MB große Enddatei... Was mach ich nun schon wieder falsch?
 

Elektranox

Still Fresh
Joined
Dec 3, 2005
Messages
1,805
Age
30
Location
Oldenburg, Germany, Earth
Website
elektranox.dyndns.org
Cyberpuer said:
Abend,

2. Die Toolchain lässt sich installieren, aber wenn ich das etwas kompiliere, gibt mir sterm aus, dass dynamisch gelinkte Bilbiotheken fehlen würde. Soweit ja nicht schlimm, nur kriege ich statisch linken nicht gebacken.

Könnte ihr mir sagen, was g++ hören will, damit alles statisch gelinkt wird?
Könnt ihr mir bei einem Problem helfen?

mfG Cyberpuer

Edit: Hey, ich habe es geschafft mit der Toolchain von dev.gp2x.de etwas statisch zu kompileren:

Es lag wohl an der Reihenfolge der libs. Nun habe ich aber ein neues Problem. Früher waren meine Programme recht klein, nun sind sie 2,4 MB groß. :( Wenn ich probiere nur eines statisch zu linken (der GP2X vermisste nur die smpeg-lib, glaube ich)
Code:
	/usr/local/gp2xdev/gp2x/bin/g++ -O2 -D_REENTRANT -DGP2X -w -I/usr/local/gp2xdev/gp2x/include -I/usr/local/gp2xdev/include -I/usr/local/gp2xdev/include/SDL -o /media/hda9/gp2x/car/car.gpe /media/hda9/gp2x/car/main.c -L/usr/local/gp2xdev/gp2x/lib -L/usr/local/gp2xdev/lib -lSDL_image -lSDL_mixer -lSDL_ttf -lpng -ljpeg -lvorbisidec -lmad -lfreetype -static -lsmpeg -dynamic -lz -lSDL -lpthread
bringt mir das nur ca. 20 neue Dateien, die alles main heißen, verschiedene Endungen haben und bis zu 2 MB groß sind und eine neue 2,4 MB große Enddatei... Was mach ich nun schon wieder falsch?
:) Das Toolchain von dev.gp2x.de ist das von Oopo, aber leicht modifiziert. Ursprünglich hatte es ja manchmal leichte Probleme mit vorhandenen libs im sys, die habe ich in der version entfernt, sonst ist es genau oopos.

also:
1. für die SDL libs gibts extra nen befehl sdl-config. Der ist empfehlenswert ;)
2. solltest du dir nen Makefile machen und das compilen und linken trennen, dann wird für dich auch gleicht übersichtlicher wo das Problem liegt :)
3. das Dateisystem erlaubt keine 20 main Dateien, also irgendwas musst du falsch beschreiben xD

Falls jemand Interesse hat kann er übrigens gerne ein Tutorial für dev.gp2x.de schreiben, dass mal auf Grundlegende Sachen wie statisches/dynamisches Linken und Makefiles eingeht. Ich hab leider keine Zeit dafür :confused:

Für irgendwann in der Zukunft plane ich übrigens auf das open2x Toolchain zu switchen. Ich müsste mich da nochmal mit den Leuten hinter Open2X kurzschließen, aber zur Zeit scheint da ja eh wenig zu laufen ;)
Code:
<i>
</i>all: car.gpe

car.gpe: car.o
	g++ car.o $Linkerflags (also -L -lblamuh und --static)$ -o car.gpe

car.o: car.cpp
	g++ $Compile flags (also -I ... )$ -c car.cpp

clean:
	rm -rf *.o car.gpe
bzw. übersichtlicher aber nicht ganz so verständlich:
Code:
<i>
</i>CC=/usr/local/gp2xdev/gp2x/bin/g++
CFLAGS=-c -Wall -I/bla/moo
LDFLAGS=-L/bla/muh -lsdl
SOURCES=car.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=car.gpe

all: $(SOURCES) $(EXECUTABLE)
	
$(EXECUTABLE): $(OBJECTS) 
	$(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
	$(CC) $(CFLAGS) $< -o $@
bei CFLAGS kommen halt die -I Parameter in irgendeiner Reihenfolge rein. Der Compiler erstellt dann eine car.o Datei. danach wird der g++ dann nochmal aufgerufen und ihm wird die car.o Datei zusammen mit den *.o Dateien von den Libaries gegeben und die Sachen werden zusammen gelinkt. Dafür musst du in den LDFLAGS per "-L" den Suchort der Libs angeben und mit "-lbla" die zu linkenden Libs. Außerdem halt noch "--static".

Nun zur Reihenfolge: Am besten du führst "sdl-config --libs" oder "--static-libs" aus (und zwar das aus dem GP2X Toolchain) und nimmst den Output in der Reihenfolge. Danach fügst du hinzu was du noch brauchst ;)
 

Ziz

Advanced Member
Joined
Jan 15, 2006
Messages
3,584
Klingt sehr interessant. Vielleicht bringt es ja was. Wollte eh mal ne "professionellere" Makefile schreiben. Meine hat 2 Möglichkeiten:
Linux oder GP2X und ruft bei beiden einfach nur g++ bzw. gp2x-g++ mit allen möglichen Kommandozeilenparametern auf. Ich werde mir dein Textlein mal auf meinen Palm zaubern und in der Bahn nochmal in Ruhe durchlesen.

Danke für die Mühe!
mfG Cyberpuer

PS: Achja, es waren ja auch 28 (hab nachgezählt) main-Dateien mit verschiedenen Endungen. ^^
 

Elektranox

Still Fresh
Joined
Dec 3, 2005
Messages
1,805
Age
30
Location
Oldenburg, Germany, Earth
Website
elektranox.dyndns.org
Cyberpuer said:
Klingt sehr interessant. Vielleicht bringt es ja was. Wollte eh mal ne "professionellere" Makefile schreiben. Meine hat 2 Möglichkeiten:
Linux oder GP2X und ruft bei beiden einfach nur g++ bzw. gp2x-g++ mit allen möglichen Kommandozeilenparametern auf. Ich werde mir dein Textlein mal auf meinen Palm zaubern und in der Bahn nochmal in Ruhe durchlesen.

Danke für die Mühe!
mfG Cyberpuer

PS: Achja, es waren ja auch 28 (hab nachgezählt) main-Dateien mit verschiedenen Endungen. ^^
In dem Falle wären die Endungen interessant zu wissen :) Auf jeden Fall macht ein sauberes Makefile den Kram gleich viel übersichtlicher, da die einzelnen Befehle dann kürzer werden und einige Fehlerquellen ausschließen kann. Desweiteren solltest du wie gesagt `sdl-config` verwenden , dass übernimmt nen ganzen Teil der Drecksarbeit. Für normale Bibliotheken unter Linux gibts sowas übrigens auch, da heißt das pkg-config. Wenn du also mal nen GTK oder QT Programm machen willst würde das ähnlich funktionieren :D
 

Ziz

Advanced Member
Joined
Jan 15, 2006
Messages
3,584
Hey, danke für die "Insidertipps". Alles im imaginären Spickzettel des Kopps gespeichert. Teste nun mal SDL-Config und danach eine neue Makefile aus und gib dann Bescheid über Erfolg oder neue Fragen. :lol:

Edit: So, ich habe mir nun folgende Makefile für den GP2X erstellt. Die Datei ist zwar immernoch 2,4MB groß, dafür kenn ich nun das Prinzip hinter "make"...
Code:
CC=/usr/local/gp2xdev/gp2x/bin/g++
LD=/usr/local/gp2xdev/gp2x/bin/ld #not used...
CFLAGS=`/usr/local/gp2xdev/bin/sdl-config --cflags`
LDFLAGS=-static -lSDL_image -lSDL_ttf -lSDL_mixer -lpng -ljpeg -lfreetype -lsmpeg -lvorbisidec -lz `/usr/local/gp2xdev/bin/sdl-config --static-libs`
SOURCE=main.c
OBJECT=main.o
EXECUTABLE=car.gpe

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECT)
	$(CC) $(OBJECT) $(LDFLAGS) -o $(EXECUTABLE)

$(OBJECT): $(SOURCE)
	$(CC) $(CFLAGS) -c $(SOURCE)

clean:
	rm $(OBJECT)
Ist es eigentlich überhaupt möglich nur smpeg statisch und den Rest dynamisch zu linken?
 

Elektranox

Still Fresh
Joined
Dec 3, 2005
Messages
1,805
Age
30
Location
Oldenburg, Germany, Earth
Website
elektranox.dyndns.org
Code:
<i>
</i>gcc -o foo foo.o bar.o -static -lLIB_SOLL_STATISCH -lLIB_SOLL_STATISCH -dynamic -lLIB_SOLL_DYNAMISCH -lLIB_SOLL_DYNAMISCH
Du musst jetzt dank deines schönen Makefiles also nur noch "LD" verändern ^^ Achja die Reihenfolge ist wichtig. Du musst erst die statischen Libs übergeben und dann die dynamischen...
 

Ziz

Advanced Member
Joined
Jan 15, 2006
Messages
3,584
Elektranox said:
Code:
<i>
</i>gcc -o foo foo.o bar.o -static -lLIB_SOLL_STATISCH -lLIB_SOLL_STATISCH -dynamic -lLIB_SOLL_DYNAMISCH -lLIB_SOLL_DYNAMISCH
Du musst jetzt dank deines schönen Makefiles also nur noch "LD" verändern ^^ Achja die Reihenfolge ist wichtig. Du musst erst die statischen Libs übergeben und dann die dynamischen...
Hm, bringt alles nichts.
Selbst mit:
LDFLAGS=-static -lSDL_mixer -lsmpeg -dynamic -lSDL_image -lSDL_ttf -lpng -ljpeg -lfreetype -lvorbisidec -lz `/usr/local/gp2xdev/bin/sdl-config --libs`
bleibt es bei 2,4 MB. Ich hab das Gefühl EINMAL statisch, IMMER statisch. So halb halb mag er nicht...
 

Elektranox

Still Fresh
Joined
Dec 3, 2005
Messages
1,805
Age
30
Location
Oldenburg, Germany, Earth
Website
elektranox.dyndns.org
Cyberpuer said:
Elektranox said:
Code:
<i>
</i>gcc -o foo foo.o bar.o -static -lLIB_SOLL_STATISCH -lLIB_SOLL_STATISCH -dynamic -lLIB_SOLL_DYNAMISCH -lLIB_SOLL_DYNAMISCH
Du musst jetzt dank deines schönen Makefiles also nur noch "LD" verändern ^^ Achja die Reihenfolge ist wichtig. Du musst erst die statischen Libs übergeben und dann die dynamischen...
Hm, bringt alles nichts.
Selbst mit:
LDFLAGS=-static -lSDL_mixer -lsmpeg -dynamic -lSDL_image -lSDL_ttf -lpng -ljpeg -lfreetype -lvorbisidec -lz `/usr/local/gp2xdev/bin/sdl-config --libs`
bleibt es bei 2,4 MB. Ich hab das Gefühl EINMAL statisch, IMMER statisch. So halb halb mag er nicht...
Wenn du SDL_mixer statisch verlinkst, dann wird SDL halt auch statisch verlinkt, da SDL_mixer das braucht... (AFAIK)
 

Ziz

Advanced Member
Joined
Jan 15, 2006
Messages
3,584
Dachte, das, was SDL_mixer so braucht, holt es sich dann halt dynamisch. ^_^
Sind halt zwei Probleme, die sich ergeben:
a) Ich muss die Abhängigkeiten rückwärts angeben.
D.h., wenn SDL_mixer smpeg brauch, muss ich "-lSDL_mixer -lsmpeg" angeben. Umgekehrt findet SDL_mixer die Funktionen aus lsmpeg nicht. :wacko:
b) Ich muss erst statisch dann dynamisch angeben.

=> Widerspruch ^^

Naja, 2,4 MB lassen sich verkraften. Kleine Tools, die man wieder komplett dynamisch linken kann, brauchen ja keinen Ton. ^_^

Danke für eure Hilfe!

mfG Cyberpuer
 

Elektranox

Still Fresh
Joined
Dec 3, 2005
Messages
1,805
Age
30
Location
Oldenburg, Germany, Earth
Website
elektranox.dyndns.org
Cyberpuer said:
Dachte, das, was SDL_mixer so braucht, holt es sich dann halt dynamisch. ^_^
Sind halt zwei Probleme, die sich ergeben:
a) Ich muss die Abhängigkeiten rückwärts angeben.
D.h., wenn SDL_mixer smpeg brauch, muss ich "-lSDL_mixer -lsmpeg" angeben. Umgekehrt findet SDL_mixer die Funktionen aus lsmpeg nicht. :wacko:
b) Ich muss erst statisch dann dynamisch angeben.

=> Widerspruch ^^

Naja, 2,4 MB lassen sich verkraften. Kleine Tools, die man wieder komplett dynamisch linken kann, brauchen ja keinen Ton. ^_^

Danke für eure Hilfe!

mfG Cyberpuer
Jetzt weißt du warum open2x die libs enthalten soll... damit man nicht immer statisch linken muss und damit die Programme kleiner werden :D Sobald open2x wirklich draußen ist werde ich dev.gp2x.de auch auf deren Toolchain ändern und für dieses ein Ubuntu *.deb erstellen, so dass das Installieren noch einfacher wird :)
 

Ziz

Advanced Member
Joined
Jan 15, 2006
Messages
3,584
Wuhu, ein Ubuntu-deb!
Was für die "Linux-de(b)ppen" unter uns. ^_^
Naja, ich bin ansich ganz stolz auf mich, dass ich auf viele selbst kam. Und dank euch habe ich nun auch eine tolle makedatei.
 

Elektranox

Still Fresh
Joined
Dec 3, 2005
Messages
1,805
Age
30
Location
Oldenburg, Germany, Earth
Website
elektranox.dyndns.org
Cyberpuer said:
Wuhu, ein Ubuntu-deb!
Was für die "Linux-de(b)ppen" unter uns. ^_^
Naja, ich bin ansich ganz stolz auf mich, dass ich auf viele selbst kam. Und dank euch habe ich nun auch eine tolle makedatei.
vor allem ist es bequemer :D normalerweise würde ich es auch ans ubuntu universe schicken, aber dafür hat der GP2X wohl noch nicht genügend verbreitung gefunden ^^
 

Ziz

Advanced Member
Joined
Jan 15, 2006
Messages
3,584
Hm, ist das so stark davon abhängig? Machen wir uns nichts vor, von 90% der Anwendungen im Ubuntu Universe haben 99,9% der Anwender von Ubuntu noch nie was gehört... ^_^
 

Elektranox

Still Fresh
Joined
Dec 3, 2005
Messages
1,805
Age
30
Location
Oldenburg, Germany, Earth
Website
elektranox.dyndns.org
Cyberpuer said:
Hm, ist das so stark davon abhängig? Machen wir uns nichts vor, von 90% der Anwendungen im Ubuntu Universe haben 99,9% der Anwender von Ubuntu noch nie was gehört... ^_^
aber die GP2X Entwickler, die auch Ubuntu benutzen sind nochmal wieder weitaus weniger als 0,1% (0,1% = je 1000te Person) Ich kanns ja dann einfach mal ans REVU Team schicken und schauen, was die davon halten ;)
 

paines

Still Fresh
Joined
Sep 16, 2006
Messages
112
@Elektranox:
>
aber die GP2X Entwickler, die auch Ubuntu benutzen sind nochmal wieder weitaus weniger als 0,1% (0,1% = je 1000te Person) Ich kanns ja dann einfach mal ans REVU Team schicken und schauen, was die davon halten
<

Vlt. geht die Rechnung auch anders auf. (mein Wunschdenken ;-) )
Dadurch das auf einmal im Ubuntun Repo ein GP2X SDK verfügbar ist, könnte mehr Leute dazu animieren sich auch einen zuzulegen und dafür Software zu entwickeln/ portieren.

Gruß
paines
 
Top