Hilfe fuer Cross Compiler gesucht
-
Hallo,
ich versuche einen Cross Compiler zu uebersetzen (linux, gcc, glibc, unter i386 fuer Ziel arm) aber ich scheitere immer an irgendwelchen Fehlern. Hat jemand so etwas schon gemacht und kann mir ein paar Tips geben? Vielleicht auch nur, wo ich jemand finden kann, der sich damit auskennt.
Gruss
Matthias
-
Naja. Recht grundlegend: Erstmal die Binutils übersetzt. Dann den Compiler mit den entsprechenden Configure aufrufen. Fertig.
Wenn du einen Fehler hast, dann solltest du ihn schon nennen. Ansonsten gibt es eigentlich genug Tutorials im Netz, wie man einen GCC-Crosscompiler compiliert. Habe aber gerade keinen vernünftigen zur Hand.
-
Hallo,
das mit den Tutorials habe ich schon mit zig Varianten versucht. Ich scheitere immer an irgendwelchen Abhaengigkeiten, die nicht aufgeloest werden koennen (irgendwelche Header-Dateien werden nicht gefunden).
Aber vielleicht hier mal ein wenig mehr Informationen:
Ich wuerde gern selbst einen Cross-Compiler fuer einen Nokia N800 uebersetzen (wie gesagt: ich weiss, dass es da schon eine Toolchain fuer gibt, wuerde es aber gern trotzdem selbst versuchen).
Ich hatte mir dazu zunaechst die gleichen Pakete geholt, wie auf dem Nokia drauf waren aber da kam ich gar nicht weiter. Also bin ich jetzt dazu uebergegangen und will zunaechst mal versuchen einfach nur einen ARM-Cross-Compiler fuer den speziellen ARM-Chip zu erstellen.
Dazu schon mal meine erste Frage: wenn ich eine Software mit dem ARM-Cross-Compiler compiliere und sie statisch linke, inwieweit ist dieses Binary dann plattformabhaengig?Zweite Frage: wenn ich eine Toolchain erstellen will, wie sollte die grobe Reihenfolge sein (ich finde da in den Tutorials leider verschiedene Varianten):
Binutils uebersetzen, mit Target=Zielplattform, Prefix=/neuesZeugs
Jetzt den GCC? Oder erst Header-Files irgendwohin kopieren?Gruss
-
hfccg schrieb:
das mit den Tutorials habe ich schon mit zig Varianten versucht. Ich scheitere immer an irgendwelchen Abhaengigkeiten, die nicht aufgeloest werden koennen (irgendwelche Header-Dateien werden nicht gefunden).
Irgendwelche ist ein bisschen unpräziese. Du brauchst halt das Core-Paket vom GCC + die Sprache, die du übersetzen willst.
hfccg schrieb:
Dazu schon mal meine erste Frage: wenn ich eine Software mit dem ARM-Cross-Compiler compiliere und sie statisch linke, inwieweit ist dieses Binary dann plattformabhaengig?
Die Frage ist, wogegen du statisch linken willst. Du brauchst ja eine C-Standard-Bibliothek für die Zielplattform, gegen die du Linken kannst.
Also dein Programm wird ja auf irgendwelche Systemfunktionen zugreifen sollen. Diese stecken entweder in der Standard-C-Biblithek für deine Plattform, oder du graifst auf die Manuell zu.
hfccg schrieb:
Zweite Frage: wenn ich eine Toolchain erstellen will, wie sollte die grobe Reihenfolge sein (ich finde da in den Tutorials leider verschiedene Varianten):
Binutils uebersetzen, mit Target=Zielplattform, Prefix=/neuesZeugs
Jetzt den GCC? Oder erst Header-Files irgendwohin kopieren?Das sollte die Reihenfolge sein.
-
Bzgl. Systemfunktionen: wenn ich nur folgendes Programm habe:
int main()
{
int a, b;
a=1;
b=a+1;
return 0;
}Wo werden hier überall Systemfunktionen verwendet?
Ich habe jetzt versucht den GCC laut der Anleitung zu übersetzen. Allerdings habe ich nicht gefunden, wo steht, wie meine Zielplattform genau heisst. Ich habe ein Nokia N800. D.h. (soweit ich weiss) ist das ein ARM11, genauer ein ARM 1136 JFS. Ich hatte zunaechst --target=arm-elf verwendet. Dann kam eine Fehlermeldung von wegen, dass die Kombination host/target nicht unterstuetzt ist.
Ich habe dann in den Quellen eine Datei arm1136jfs gefunden und habe mal
--target=arm-1136jfs-elf verwendet. Jetzt bekomme ich eine Menge anderer Fehlermeldungen, wie z.B.:
/tmp/ccfke4Xg.s:106: Error: expecting operand after ','; got nothing
/tmp/ccfke4Xg.s:107: Error: no such instruction:ldr r3,.L24+16' /tmp/ccfke4Xg.s:108: Error: no such instruction:
ldreq pc,[sp],'
/tmp/ccfke4Xg.s:109: Error: expecting operand after ','; got nothing
/tmp/ccfke4Xg.s:110: Error: no such instruction:ldreq pc,[sp],' /tmp/ccfke4Xg.s:111: Error: too many memory references for
mov'
/tmp/ccfke4Xg.s:112: Error: no such instruction:bx r3' /tmp/ccfke4Xg.s:113: Error: no such instruction:
ldr pc,[sp],'
/tmp/ccfke4Xg.s:125: Error: junk at end of line, first unrecognized character is@' /tmp/ccfke4Xg.s:126: Error: junk at end of line, first unrecognized character is
@'
/tmp/ccfke4Xg.s:127: Error: invalid char '[' beginning operand 2[sp' /tmp/ccfke4Xg.s:129: Error: no such instruction:
bl frame_dummy'
/tmp/ccfke4Xg.s:131: Error: no such instruction:ldr pc,[sp],' make[3]: *** [crtbegin.o] Error 1 make[3]: Leaving directory
/mnt/glibc/install/gcc-4.0.4/gcc'
make[2]: *** [extra] Error 2
make[2]: Leaving directory/mnt/glibc/install/gcc-4.0.4/gcc' make[1]: *** [stmp-multilib] Error 2 make[1]: Leaving directory
/mnt/glibc/install/gcc-4.0.4/gcc'
make: *** [all-gcc] Error 2