AVR: undefined reference to `__muluhisi3'

Persönliche Seite #3356838
Lesenswert?
• ▲
▼
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.
Angehängte Dateien:
Gast #3357047
Lesenswert?
• ▲
▼
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.
Persönliche Seite #4341504
Lesenswert?
• ▲
▼
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.