www.mikrocontroller.net

Forum: Compiler & IDEs Kann c-File unter Win mit GNU-ARM Toolchain kompilieren, unter Linux nicht!


Autor: Andy Andy (grandmaster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

Also, ich habe folgendes Problem. Ich muss für die Uni ein Programm für 
einen Lego Mindstorm schreiben. Das ganze soll aus Matlab/Simulink raus 
passieren, was hier jetzt aber erstmal unwichtig ist. Ich hab ein 
richtiges *.c-File, ein *.oil-File und ein make-file. Die kann ich aus 
Matlab raus erstellen. Sowohl auf dem Windwos-Rechner, als auch auf dem 
Linux Rechner hab ich die GNU-ARM Toolchain mit gcc 4.0.2 installiert. 
Laut diversen Berichten im Internet braucht man diese Version, sonst 
soll das wohl gar nicht klappen.

Jetzt zu meinem Problem. Ich kann die aus Matlab raus erzeugten Files 
unter Windwos mittels der Toolchain komilieren, indem ich das makefile 
ausführe. Das Prgramm was rauskommt funzt auf auf dem Lego Mindstorm, 
heißt also, der Code passt und die Toolchain auch. Wenn ich die aus 
Matlab erstellten Files auf meinen Windwos-Rechner kopiere und die 
makefile ausführe, dann funktioniert das compilierte Programm auch.

Heißt, die Files, bevor die GNU-ARM Toolchain eingreift, sind sowohl auf 
dem Win als auch auf dem Linux Rechner korrekt.

Wenn ich jetzt aber die makefile unter Linux aufrufe, bekomme ich Fehler 
in folgender Form:
GNUARM/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld: failed 
to merge target specific data of file build/nxtvm/platform/nxt/vectors.o
GNUARM/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld: ERROR: 
build/nxt_binary_header.o uses hardware FP, whereas nxtway_app_rom.elf 
uses software FP

Jetzt geh ich mal davon aus, dass meine GNU-ARM Toolchain unter Linux 
falsch konfiguriert ist. Ich muss leider (Vorgabe der UNI), OpenSUSE 
11.1 benutzen. D.h. ich muss mit die Toolchain selbst kompilieren.

Ich bin im großen und ganzen nach folgender Anleitung vorgegangen:
http://wiki.ubuntuusers.de/GNU_ARM-Toolchain

allerdings mit den Befehlen für OpenSUSE. Also su, anstatt sudo. Rest 
hab ich genau so gemacht und hab folgende Files installiert:
binutils-2.16.1, gcc-4.0.2, gdb-6.8, newlib-1.14.0, weil ich ja die 
4.0.2er Version von gcc brauche. Passen die andern Files dazu, oder ist 
da vllt schon was inkompatiebel?

Wie schon gesagt, ich bin bei der install nach der oben genannten 
Anleitung vorgegangen. Jetzt ist mir aber aufgefallen, dass ich bei der 
Win-Install der gnu-arm Toolchain im config Fenster vor der eigentlichen 
install den Harken vor:
-Floating Point Unit und
-big Endian
entferne (inklusive aller Unterpunkte bei diesen Einträgen). Nur noch 
Litte Endian bleibt ein Harken davor.

Kann es sein, dass ich sowas in der Art auch bei der Install unter Linux 
machen muss? Also dass ich beim erstellen der Toolchain irgendwelche 
--with-*** Anweisungen zu den in der Anleitung aufgeführten übergeben 
muss, oder welche aus der Anleitung entfernen muss?

Ich komm einfach nicht weiter, hab viele Anweisungen zur Toolchain im 
Internet gefunden und auch schon viele ausprobiert, aber es läuft 
einfach nicht.

Ich hoffe, dass mir hier jm. helfen kann, hab echt keine Idee mehr.

Schon mal vielen Dank,

gruß andy

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Windows kenne ich leider nicht. :-)

In der Regel musst Du ja mit dem configure script die Makefiles 
erstellen, richtig?
Diese sollten die Einstellungen selber korrekt machen, also ob Big oder 
Little etc.
danach make / make install.

Viel falsch kann man da nicht machen, im Grunde.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah jetzt ja :-) Sorry, Du möchtest ja die Toolchain Compilieren. :-)


Guck Dir doch mal das Configure Script im vi an. Dort solltest Du sehen 
können, welche Einstellungen Du da mitgeben kannst.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Linker sagt:

nxt_binary_header.o uses hardware FP, whereas nxtway_app_rom.elf
uses software FP

Ich vermute mal nxt_binary_header.o ist von Dir und das ist nicht mit 
dem Soft FP Kompiliert worden. Du wirst dem Compiler mitgeben müssen, 
dass Du Soft FP willst (man pages gucken).

Autor: Andy Andy (grandmaster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huhu!

Also das nxtway_app_rom.elf kommt erzeugt die Toolchain aus meinem 
*.c-File, aus meinem nxtway_app.o. Das file nxt_binary_header.o ist ein 
fertiges File, das aber vorher erzeugt wird:
Assembling 
/ecrobotNXT_v312/ecrobotNXT/environment/nxtOSEK/ecrobot/nxt_binary_heade 
r.s  to build/nxt_binary_header.o

Soll ich mal die ganze Fehlermeldung posten?

@Rene:

Du schreibst: 'Guck Dir doch mal das Configure Script im vi an'.
Was ist vi? *schäm? ;)

Danke schomal für eure Hilfe!

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, poste mal alles. Du willst da was mit Soft FP und Hard FP linken, 
das geht nicht. vi ist ein Editor unter UNIX. Kannst aber auch

more ./configure

machen.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehme an, das Zielsystem hat kein Hard FP. Dann musst du gucken dass 
Du das File nxt_binary_header.c mit Soft FP kompilierst.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
poste doch einfach mal den kompletten gcc output, damit man 
nachvollziehen kann woher welches File kommt und wie was kompiliert 
wird.

Autor: Andy Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Also hier mal ein helloworld programm, dass unter Windows so komplett 
durchläuft, wenn ich make all eingebe.

Unter Linux passiert folgendes:

linux-y8m0:/home/andy/Documents/ecrobotNXT/environment/nxtOSEK/samples_c 
/helloworld  # make all
Compiling ../../ecrobot/../toppers_osek/kernel/alarm.c to alarm.o
Compiling ../../ecrobot/../toppers_osek/kernel/event.c to event.o
Compiling ../../ecrobot/../toppers_osek/kernel/interrupt.c to 
interrupt.o
Compiling ../../ecrobot/../toppers_osek/kernel/osctl.c to osctl.o
Compiling ../../ecrobot/../toppers_osek/kernel/resource.c to resource.o
Compiling ../../ecrobot/../toppers_osek/kernel/task.c to task.o
Compiling ../../ecrobot/../toppers_osek/kernel/task_manage.c to 
task_manage.o
Compiling 
../../ecrobot/../toppers_osek/config/at91sam7s-gnu/cpu_config.c to 
cpu_config.o
Compiling 
../../ecrobot/../toppers_osek/config/at91sam7s-gnu/lego_nxt/sys_config.c 
to sys_config.o
Generating  testststs OSEK kernel config files from ./helloworld.oil
Compiling kernel_cfg.c to kernel_cfg.o
Compiling ../../ecrobot/../ecrobot/c/syscalls.c to syscalls.o
Compiling ../../ecrobot/../ecrobot/c/ecrobot_bluetooth.c to 
ecrobot_bluetooth.o
Compiling ../../ecrobot/../ecrobot/c/ecrobot_base.c to ecrobot_base.o
Compiling ../../ecrobot/../ecrobot/c/ecrobot.c to ecrobot.o
Compiling helloworld.c to helloworld.o
Compiling 
../../ecrobot/../toppers_osek/syslib/at91sam7s-gnu/lego_nxt/hw_sys_timer 
.c  to hw_sys_timer.oram
Assembling ../../ecrobot/../lejos_nxj/src/nxtvm/platform/nxt/vectors.s 
to vectors.o
Assembling ../../ecrobot/../toppers_osek/config/at91sam7s-gnu/debug.S to 
debug.o
Assembling 
../../ecrobot/../toppers_osek/config/at91sam7s-gnu/lego_nxt/sys_support. 
S  to sys_support.o
Assembling ../../ecrobot/../ecrobot/c/nxt_binary_header.s to 
nxt_binary_header.o
Assembling ../../ecrobot/../ecrobot/c/nxt_entry_point.s to 
nxt_entry_point.o
Assembling ../../ecrobot/../ecrobot/c/ecrobot_init.s to ecrobot_init.o
Assembling 
../../ecrobot/../toppers_osek/config/at91sam7s-gnu/cpu_support.S to 
cpu_support.oram
Assembling ../../ecrobot/../toppers_osek/config/at91sam7s-gnu/irq.s to 
irq.oram
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
build/nxtvm/platform/nxt/vectors.o uses hardware FP, whereas 
helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file build/nxtvm/platform/nxt/vectors.o
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
build/nxt_binary_header.o uses hardware FP, whereas 
helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file build/nxt_binary_header.o
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
build/nxt_entry_point.o uses hardware FP, whereas 
helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file build/nxt_entry_point.o
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
build/ecrobot_init.o uses hardware FP, whereas helloworld_OSEK_rom.elf 
uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file build/ecrobot_init.o
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(ecrobot_device_hook.o) uses 
hardware FP, whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(ecrobot_device_hook.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(ecrobot_interface.o) uses hardware 
FP, whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(ecrobot_interface.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(osek_hook.o) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(osek_hook.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(uart.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(uart.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(systick.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(systick.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(byte_fifo.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(byte_fifo.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(aic.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(aic.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(udp.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(udp.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(twi.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(twi.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(nxt_spi.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(nxt_spi.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(nxt_motors.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(nxt_motors.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(data_abort.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(data_abort.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(display.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(display.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(i2c.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(i2c.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(sound.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(sound.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(bt.oram) uses hardware FP, whereas 
helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(bt.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(nxt_avr.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(nxt_avr.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(sensors.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(sensors.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(nxt_lcd.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(nxt_lcd.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(flash_loader.oram) uses hardware 
FP, whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(flash_loader.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(interrupts.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(interrupts.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(ecrobot_usb.o) uses hardware FP, 
whereas helloworld_OSEK_rom.elfuses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(ecrobot_usb.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
../../ecrobot/../ecrobot/libecrobot.a(flashprog.oram) uses hardware FP, 
whereas helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
../../ecrobot/../ecrobot/libecrobot.a(flashprog.oram)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(memcpy.o)  uses hardware FP, whereas helloworld_OSEK_rom.elf 
uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(memcpy.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(memset.o)  uses hardware FP, whereas helloworld_OSEK_rom.elf 
uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(memset.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(strcmp.o)  uses hardware FP, whereas helloworld_OSEK_rom.elf 
uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(strcmp.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(strcpy.o)  uses hardware FP, whereas helloworld_OSEK_rom.elf 
uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(strcpy.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(strlen.o)  uses hardware FP, whereas helloworld_OSEK_rom.elf 
uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(strlen.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(strncpy.o)  uses hardware FP, whereas helloworld_OSEK_rom.elf 
uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file 
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/lib/thumb/interwor 
k/libc.a(strncpy.o)
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: ERROR: 
build/nxtvm/platform/nxt/vectors.o uses hardware FP, whereas 
helloworld_OSEK_rom.elf uses software FP
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: failed to 
merge target specific data of file build/nxtvm/platform/nxt/vectors.o
collect2: ld returned 1 exit status
make: *** [helloworld_OSEK_rom.elf] Fehler 1
linux-y8m0:/home/andy/Documents/ecrobotNXT/environment/nxtOSEK/samples_c 
/helloworld  #


Ist ziemlich viel, ich hoffe, ihr blickt da durch. Wie schon gesagt, 
einzige was halt wirklich nur unterschiedlich sein kann, ist eben die 
art der Konfiguration der gnu-toolchain, glaub ich. Weiß halt nicht, was 
ich bei Linux eingeben muss, wenn ich die toolchain konfiguriere.

Ich hoffe, es kann mir jm. helfen :).

Danke schonmal für eure Hilfe!

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch bitte noch das Makefile.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spar das Makefile. Du hast die libs nicht mit Soft FP kompiliert. Musst 
Du nochmals kompilieren und installieren.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry wenn meine Post etwas kurz und komisch sind, ich mach das alles 
mit dem iPhone.

Vermutlich hast Du bei newlib kompilieren

--with-float=soft

vergessen.


Ich bin mir aber nicht sicher. Das ist etwas wirr, was von wo kommt.
Es ist ein völliges Chaos von mit und ohne Hard FP.

Was hat das Zielsystem? Mit Hard FP oder Ohne?

Autor: Andy Andy (grandmaster)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Also erstmal vielen Dank für eure reichlichen Antworten. Die Files 
befinden sich als Zip im Anhang. Also das *.c, *.oil und das makefile.

Die sollten aber stimmen, weil ich die unter Windows komplett richtig 
kompilieren kann und das File, welches dabei raus kommt, funzt dann 
auch, wenn ich es auf den µC.

Das Zielsystem, also der Controller, auf den das Programm geladen werden 
soll, hat kein hardware-floatingpoint. Also Float=Soft.

Hab die Gnu-Arm-Toolchain wie folgt kompiliert:

cd build-binutils
../binutils-2.16.1/configure --target=arm-elf --prefix=/usr/bin/gnuarm 
--enable-interwork --enable-multilib --enable-target-optspace 
--with-float=soft

cd ../build-newlib
../newlib-1.14.0/configure --target=arm-elf --prefix=/usr/bin/gnuarm 
--enable-interwork --enable-multilib --enable-target-optspace 
--with-float=soft

cd ../build-gcc
sudo ../gcc-4.0.2/configure --target=arm-elf --prefix=/usr/bin/gnuarm 
--enable-interwork --enable-multilib --enable-languages="c,c++" 
--enable-target-optspace --with-float=soft --with-newlib 
--with-headers=../newlib-1.14.0/newlib/libc/include/ --disable-nls

cd ../build-gdb
../gdb-6.8/configure --target=arm-elf --prefix=/usr/bin/gnuarm 
--enable-interwork --enable-multilib --enable-target-optspace 
--disable-werror

Hab also bei der newlib leider nicht einfach --with-float=soft 
vergessen. Allerdings steht das bei der gdb-6.8 config nicht drin. Kann 
das ein Problem sein?

Was mir auch noch eingefallen ist. Ich hab ja von Haus aus bei der Linux 
install gcc mit installiert. Da benutz ich die aktuellste Version. Im 
Internet hab ich gelesen, dass dieser Fehler den ich hab, auftritt, wenn 
man für den einen compiler gcc aktueller gcc-4.0.2 hat. Ich hab ja jetzt 
mit meiner Toolchain den gcc-4.0.2 runtergeladen, kompiliert und 
installiert. Jetzt hab ich ja auch auch noch den anderen gcc drauf. Hat 
der was mit der Arm Toolchain zu tun? Kann es sein, dass der Probleme 
macht? Oder hat das miteinander gar nix zu tun? Bei der Fehlermeldung 
kommt der Error ja auch von:
/opt/gnuarm/lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld

also aus dem gnuarm Verzeichniss.

Hoffe, ihr habt noch Ideen, ich hab keine mehr :(.

Danke,

andy

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das könnte das Problem sein. Schmeiss nochmals alles runter inkl. den 
gcc. Dann installiere den gcc 4.0.2 und kompiliere die Toolchain 
nochmals. Das Problem welches Du hast, ist, das die libc (die wird mit 
dem gcc kompiliert) mit Hardware FP gebildet wurde. Deshalb motzt der 
Linker.

Autor: Andy Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also soweit mal besten dank. Dann probier ich das heute Mittag mal aus. 
Weißt du zufällig auch, ob ich einfach den aktuellen gcc in yast löschen 
kann und den 4.0.2er installieren? Meinst du das geht? Löscht der auch 
alle libs, die jetzt schon drauf sind?

Naja, ich werde mal testen und meld mich dann!

Danke schön!

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das geht.

Autor: Andy Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Also ich hab jetzt mit mal eine Virtual Maschine aufgesetzt und SUSE mal 
ohne gcc installiert. Hab ganz naiv gedacht, ich kann dann über yast 
einfach den gcc-4.0.2 installieren, aber den gibts da nicht.
Man muss dazu sagen, dass ich von Linux nicht so die Ahnung habe :(.

Ich hab dann mal den gcc-3.4.3 installiert und damit die Toolchain 
compiliert. Danach konnte ich mein c, oil, make-File wieder wie gehabt 
compilieren, und es kamen die gleichen Fehler.

Hast du noch eine Idee? Muss es wirklich der 4.0.2er sein? Wenn ja, wie 
bekomm ich den auf einen für mich machbaren Weg auf meinen Linux PC? :-(

Schönes WE, gruß andy

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mail mir bitte mal den kompletten Output wie die toolchain gebildet 
wird. Da hat es ein Fehler. Libc wird mit HW FP gebildet.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.