Mit gcc-Version 4.8.1 (Gentoo 4.8.1-r1 p1.2, pie-0.5.7) Was ist da los?
Willhelm schrieb: > Mit gcc-4.6.3 funktioniert es ohne Probleme. __muluhisi3 gibt es auch erst seit 4.7. Da du offensichtlich sowohl 4.6 als auch 4.8 installiert hast, ist wohl bei letzterer die libgcc (oder ein Teil davon) verschütt gegangen. Bei mir hier findet der Linker das __muluhisi3 jedenfalls.
:
Bearbeitet durch Moderator
ALso folgendes Testprogramm läßt sich linken:
1 | long fun (unsigned a, long b) |
2 | {
|
3 | return a * b; |
4 | }
|
5 | |
6 | int main () |
7 | {
|
8 | return 0; |
9 | }
|
1 | avr-gcc -Os -mmcu=atmega8 foo.c -Wl,-Map,foo.map -o foo.elf |
Wie im Map-File ersichtlich, wird gegen __muluhisi3 gelinkt:
1 | .text.libgcc.mul |
2 | 0x00000048 0x14 .../bin/../lib/gcc/avr/4.8.0/avr4\libgcc.a(_muluhisi3.o) |
3 | 0x00000048 __muluhisi3 |
Der Fehler kann auftauchen, wenn Objekte, die mit einem neuen (>= 4.7) Compiler erstellt wurden, mit einer alten (< 4.7) Toolchain gelinkt werden. Die widerspricht jedoch den Release Notes 4.7, siehe Caveats:
1 | The AVR port's libgcc has been improved and its multilib structure |
2 | has been enhanced. As a result, all objects contributing to an |
3 | application must either be compiled with GCC versions up to 4.6.x |
4 | or with GCC versions 4.7.1 or later. If the compiler is used with |
5 | AVR Libc, you need a version that supports the new layout, |
6 | i.e. implements #35407. |
http://gcc.gnu.org/gcc-4.7/changes.html Wobei es anstatt "compiled" eigentlich "compiled and linked" heißen muß. Evtl. besteht der Fehler auch darim, daß hart gegen eine bestimmte libgcc gelinkt wird oder falsche Linkpfade angegeben wurden.
:
Bearbeitet durch User
Johann L. schrieb: > Evtl. besteht der Fehler auch darim, daß hart gegen eine bestimmte > libgcc gelinkt wird oder falsche Linkpfade angegeben wurden. Ich versuche immer nur eine Version der Tools zu installieren: cross-avr/gcc-4.8.1-r1 cross-avr/avr-libc-1.8.0 cross-avr/gcc-4.6.3 cross-avr/binutils-2.23 Den gcc-4.8.1 habe ich mit binutils und libc installiert und es lief nicht. Danach habe ich nur den gcc-4.6.3 installiert und dann lief es mit dem. Was da nun genau schief läuft bleibt mir ein Rätsel.
Das Prolem ist reine GCC-Sache und hat weder etwas mit Binutils zu tun noch mit der Libc. Ohne weitere Infos kann man da nicht helfen. Evtl. ergeben sich mehr Infos aus einem Mapfile oder beim Aufruf der Tools mit -v Interessant zu wissen wäre, welche Lib-Suchpfade verwendet werden und wo jeweils die libgcc installiert wurde.
:
Bearbeitet durch User
Ich hatte das gleiche Problem --prefix=/home/hjh/avrgcc_4.x.y gibt beim Compilieren an, wo der Compiler hininstalliert wird. 1 binutils.2.23.1 gcc-4.7.2 avr-libc-1.8.0 Braucht LIBDIR = /home/hjh/avrgcc_4.7.2/avr/lib Beim Compilieren -mmcu=atmega32 und beim Linken -mmcu=atmega32 2 binutils.2.25.1 gcc-4.9.1 avr-libc-1.8.1 Braucht LIBDIR = /home/hjh/avrgcc_4.9.1/avr/lib Beim Compilieren -mmcu=atmega32 und beim Linken -mmcu=atmega32 3 binutils.2.25.1 gcc-5.2.0 avr-libc-1.8.1 Braucht LIBDIR = PREFIX = /home/hjh/avrgcc_5.2.0/lib/gcc/avr Beim Compilieren -mmcu=atmega32 und beim Linken -mmcu=avr5 Zumindest laufen dann Compiler und Linker. Ob das Programm auch taugt, teste ich später.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.