Hallo, ich schreibe momentan eine einfache Library (keine Abhängigkeiten zu anderen Librarys, nur mathematische Algorithmen), die sowohl auf einem ganz normalen PC (Linux bzw. Cygwin) als auch auf dem Target m68k-elf laufen soll. Ich möchte dabei Autoconf, Automake, Libtool verwenden verwenen. Es funktioniert, wenn ich die Library mit ./configure --target=m68k-elf --host=i686-suse-linux AR=m68k-elf-ar RANLIB=m68k-elf-ranlib CC=m68k-elf-gcc --enable-static --prefix=/home/bwalle/devel/remdbg/install/ --disable-shared baue. Allerdings bin ich mir da nicht so sicher, ob das die richtige Vorgehensweise ist. Besonders viel hab ich im Internet zu dem Thema nicht gefunden. Das Autobook kenne ich, besonders detailliert wird auf das Thema aber nicht eingeganben. Hat jemand noch Hinweise? Auch, wie man am besten das Linkerscript angibt (also gcc -Wl,-T/..../...ld), wenn es statt einer Library ein Programm sein soll? Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Es gibt keinen Grund, warum irgendjemand einen Computer in seinem Haus wollen würde. -- Ken Olson, Präsident der Digital Equipment Corp., (1977)
On Wed, 2004-08-04 at 13:11, Bernhard Walle wrote:
Hallo,
ich schreibe momentan eine einfache Library (keine Abhängigkeiten zu anderen Librarys, nur mathematische Algorithmen), die sowohl auf einem ganz normalen PC (Linux bzw. Cygwin) als auch auf dem Target m68k-elf laufen soll.
Ich möchte dabei Autoconf, Automake, Libtool verwenden verwenen. Es funktioniert, wenn ich die Library mit
./configure --target=m68k-elf --host=i686-suse-linux AR=m68k-elf-ar RANLIB=m68k-elf-ranlib CC=m68k-elf-gcc --enable-static --prefix=/home/bwalle/devel/remdbg/install/ --disable-shared
configure --host=m68k-elf [..] sollte genügen.
baue. Allerdings bin ich mir da nicht so sicher, ob das die richtige Vorgehensweise ist. Besonders viel hab ich im Internet zu dem Thema nicht gefunden. Das Autobook kenne ich, besonders detailliert wird auf das Thema aber nicht eingeganben.
Hat jemand noch Hinweise? Auch, wie man am besten das Linkerscript angibt (also gcc -Wl,-T/..../...ld), wenn es statt einer Library ein Programm sein soll?
Ralf
* Ralf Corsepius
On Wed, 2004-08-04 at 13:11, Bernhard Walle wrote:
ich schreibe momentan eine einfache Library (keine Abhängigkeiten zu anderen Librarys, nur mathematische Algorithmen), die sowohl auf einem ganz normalen PC (Linux bzw. Cygwin) als auch auf dem Target m68k-elf laufen soll.
Ich möchte dabei Autoconf, Automake, Libtool verwenden verwenen. Es funktioniert, wenn ich die Library mit
./configure --target=m68k-elf --host=i686-suse-linux AR=m68k-elf-ar RANLIB=m68k-elf-ranlib CC=m68k-elf-gcc --enable-static --prefix=/home/bwalle/devel/remdbg/install/ --disable-shared
configure --host=m68k-elf [..]
sollte genügen.
:-) Vielen Dank. War ein klassischer Denkfehler, kam daher, weil ich vorher Cross Compiler / Debugger gebaut habe und da das m68k-elf eben das Target war. Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Es wird Wagen geben, die von keinem Tier gezogen werden und mit unglaublicher Gewalt daherfahren. -- Leonardo da Vinci
On Wed, 2004-08-04 at 13:38, Bernhard Walle wrote:
* Ralf Corsepius
[2004-08-04 13:26]: On Wed, 2004-08-04 at 13:11, Bernhard Walle wrote:
ich schreibe momentan eine einfache Library (keine Abhängigkeiten zu anderen Librarys, nur mathematische Algorithmen), die sowohl auf einem ganz normalen PC (Linux bzw. Cygwin) als auch auf dem Target m68k-elf laufen soll.
Ich möchte dabei Autoconf, Automake, Libtool verwenden verwenen. Es funktioniert, wenn ich die Library mit
./configure --target=m68k-elf --host=i686-suse-linux AR=m68k-elf-ar RANLIB=m68k-elf-ranlib CC=m68k-elf-gcc --enable-static --prefix=/home/bwalle/devel/remdbg/install/ --disable-shared
configure --host=m68k-elf [..]
sollte genügen.
:-) Vielen Dank.
War ein klassischer Denkfehler, kam daher, weil ich vorher Cross Compiler / Debugger gebaut habe und da das m68k-elf eben das Target war.
:-) target ist das Zielsystem eines Crosstools, host ist das Laufzeitsystem auf dem eine Crossumgebung läuft. build ist das System auf dem "übersetzt" wird. Im Fall einer Library: --build=i386-pc-linux-gnu ... wir sind auf einer Linux/GNU-Umgebung. --host=m68k-elf ... wir übersetzen etwas, dass auf einem m68k-elf-System laufen soll. --target ist in der Regel bedeutungslos, ausser man übersetzt ein Crosstool. Komplexes Beispiel: configure \ --build=`config.guess` \ --host=i686-pc-cygwin \ --target=m68k-rtems Erläuterung: $build wird durch config.guess ermittelt (machen neuere autoconf's automatisch; wird nur noch in Ausnahmefällen gebraucht), es wird etwas für das Zielsystem i686-pc-cygwin übersetzt, das Code für m68k-rtems produzieren soll. Unter Linux hätte dass zur Folge, dass Cygwin-Binaries erzeugt werden, die unter Cygwin etwas für m68k-rtems produziert. Fachausdruck: [Triple Leaf] Canadian Cross Compilation (3 Compiler involviert). Von autoconf automatisch unterstützt werden nur die einfache Cross-Compilation (build!=host; durchgängig auf alle Makefiles angewandt). Alle anderen Fälle erfordern einen nicht unerheblichen Aufwand. Um die Verwirrung noch komplexer zu machen: Es gibt Pakete, bei denen $target und $host und/oder $build und $host miteinander verwechselt worden sind, da es einige historische Verirrungen um build/host/target gibt. In einfachen Fällen, wie dem deinigen, ist die Lage jedoch einfach: Faustregeln: * Vergiss $target, in der Regel wirst Du es nicht brauchen. * Vergiss $build, ausser Du weisst was Du tust. Bez. Deiner Linker-Script-Frage: Es gelten die gleichen Regeln wie bei der *FLAGS-Übergabe im Fall der "Native compilation": configure --host=<xxxx> LDFLAGS="-Wl..." oder configure --host=<xxxx> CC="xxxx-gcc -Wl..." oder ... oder ... was genau sinnvoll wäre, hängt von den Details deines Paketes ab. Ein bequemer Weg wäre die "specs" des Cross-GCC zu modifizieren (Siehe Optionen -specs und -B in gcc) und den Bezug zum Linkerscript dort einzubauen, und/oder ein Wrapperscript um den Cross-Compiler herum zu verwenden. Gruss Ralf
participants (2)
-
Bernhard Walle
-
Ralf Corsepius