Forum: Compiler & IDEs GNUARM Linkerproblem


von roty (Gast)


Lesenswert?

Hallo,

könnte mir bitte jemand weiterhelfen ?

Ich mache die ersten Gehversuche mit GNUARM unter Eclipse. Soweit
geht es schon, aber ich habe anscheinend noch ein Problem beim Linken.
Ich habe jede Menge Fehler so wie diesen unten. Denke irgendwas
mit der Library geht noch schief.


undefined reference to `__subdf3'
[../../../../../newlib-1.14.0/newlib/libc/stdlib/dtoa.c]  pyrano 
Zeile
349  4. Juli 2006 20:43:14  9377

Danke jür jede Hilfe.

von Stefan (Gast)


Lesenswert?

Was meint Frau Google dazu?

Aja. Library gcc dazulinken...
http://www.newmicros.com/discussion/archive/index.php/t-1302.html

von roty (Gast)


Lesenswert?

Frau Google schitzt schon seit längerem für mich. Sie sagt viel,
aber nichts mit dem ich was anfangen kann im momentanen Stand.

In allen meinen Beispielen stand nix von einer libgcc. Welche der
16 im GNUARM Packet ist die richtige ? (Sri, für die dumme Frage)

tbx

von Stefan (Gast)


Lesenswert?

Welche Beispiele und welches Target?

von roty (Gast)


Lesenswert?

Mittlerweile habe ich die beiden nötigen libs beim Linker angegeben,
aber es geht immer noch nicht. Jetzt kommt folgender Fehler:

C:\Programme\GNUARM\arm-elf\lib/libc.a(syscalls.o): In function
`_sbrk':
../../../../../../newlib-1.14.0/newlib/libc/sys/arm/syscalls.c:500:
undefined reference to `end'

Inzwischen habe ich gelesen, dass wohl ein direkter Linkeraufruf nicht
gleich ist, wie wenn GCC selbst den Linker aufruft. GCC findet
anscheinend die libs selber, wärend man beim Linker direkt diese mit
angeben muss.

Was muss ich tun ? Mache ich grundsätzlich was falsch?

Danke

(PS: Frau Google verstehe ich wieder nicht!)

von Stefan (Gast)


Lesenswert?

Das ist eine FAQ zur newlib.

Wenn du eine newlib von Grund auf für ein Target aufsetzen
willst/musst, musst du bestimmte Grundfunktionen noch programmieren,
weil die nur als Stubs in der newlib drin sind.

Genaueres ist in der Doku der newlib beschrieben und auch in dem ARM
Forum http://en.mikrocontroller.net taucht die Frage und Antworten dazu
regelmäßig auf.

Im konkreten Fall mit end, kann man sich ein globales Symbol im
Startup-Code anlegen. Z.B. eine Endlosschleife, die angesprungen wird,
wenn main() zurückkehrt. Oder du schreibst dir ein end)= Makro oder
eine Funktion mit einer While(1); Schleife.

von roty (Gast)


Lesenswert?

@Stefan

Danke, es hat so geklappt.

Momentan sind alle Fehler weg und ich kann mein Program schon mit dem
ARM Simulator laden und testen.

Werde einfach hier wieder fragen, wenns nicht mehr weiter geht
(natürlich nur nachdem das Forum und das WEB furchforstet wurde!)
GCC und Make und alles was dazugehört ist für einen Einsteiger in
GNU nicht einfach!

Danke nochmals für die geduldige Hilfe.

von Stefan (Gast)


Lesenswert?

Das ist doch ein schöner Anfang.

Lookielookie machen bevor man eine Frage stellt, ist auch schön.
Vielleicht findet man dabei schon einen Lösungsansatz oder Ideen für
eine präzise Frage.

Grundsätzlich sollte man beim Fragen angeben, bei welchen Tools
(Versionen!) man was (Kommandozeile, Sourcecode, Makefile...)
eingegeben hat und was rausgekommen ist (Cut&Paste der Ausgabe).

Zwei schöne Artikel dazu:

Wie man Fragen richtig stellt
http://www.lugbz.org/documents/smart-questions_de.html

Fehlerberichte - wie Sie Softwarefehler melden sollten
http://www.chiark.greenend.org.uk/~sgtatham/bugs-de.html

Nach einem Artikel "Wie man geduldig, nützliche Antworten gibt!"
suche ich noch ;-)

von roty (Gast)


Lesenswert?

Noch ein Hinweis ursprünglichen Thema.

Es kann böse Folgen haben, wenn das Symbol "end" am falschen Ort
benutzt wird. Siehe hier :

http://en.mikrocontroller.net/topic/72860#105624

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
Noch kein Account? Hier anmelden.