mikrocontroller.net

Forum: Compiler & IDEs Linkerproblem mit Library


Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Aus irgendeinem Grund fehlen mir nach dem Linken einige Objekte im
binary.
Es handelt sich hier um die arm-elf Toolchain.
Die Library enthält folgende Objekte:

$ ar -t /cygdrive/c/Programme/GNUARM/lib/libnewlib-lpc.a
_close_r.o
_fstat_r.o
_ioctl_r.o
_lseek_r.o
_open_r.o
_read_r.o
_sbrk_r.o
sys_dev.o
sys_mam.o
sys_pll.o
sys_time.o
sys_vpb.o
uart0_poll.o
_write_r.o

Wenn ich die .o-Files einzeln mit angebe, beim Linken, dann
funktioniert alles wunderbar, verwende ich dagegen NUR die Library,
dann fehlen einige Referenzen. Das .hex-File ist mit Angabe der .o's
ca. 1kB größer als nur mit der Library.

Ich weis nicht, ob ich das jetzt genügend beschrieben habe, falls
nicht, bitte nachfragen!

Vielleicht hat Jörg Wunsch ja auch grad mal Zeit um ein Auge drauf zu
werfen...

Gruß,
Patrick...

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Linker-Kommandozeile?

Du denkst dran, daß die Bibliotheken nur linear danach abgesucht
werden, ob sie ungelöste Symbole befriedigen können?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg!

Die Zeile sieht so aus:

$ arm-elf-ld -v -ohello.prg \
cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/crt0.o \
hello.o -Tlpc210x.ld

(hab die "\" wegen der Lesbarkeit hingemacht)

Ich wundere mich ja gerade, daß es keine ungelösten Symbole gibt.
Wenn ich die .o's mitlinke, wird der Code ja größer und läuft auch auf
dem Zielsystem (im Gegensatz zur Library), also ist da doch irgendwo
eine Abhängigkeit zwischen meinem Code und den objectfiles...!?

Gruß,
Patrick...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal die Funktionierende Variante:

$ arm-elf-ld -v -ohello.prg \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/crt0.o hello.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/_close_r.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/_fstat_r.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/_ioctl_r.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/_lseek_r.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/_open_r.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/_read_r.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/_sbrk_r.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/sys_dev.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/sys_mam.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/sys_pll.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/sys_time.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/sys_vpb.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/uart0_poll.o \
/cygdrive/c/Programme/GNUARM/lib/newlib-lpc_rel_2/_write_r.o \
-Tlpc210x.ld

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, tja, ohne ungelöste Referenzen kann er natürlich auch nicht
wissen, was er noch hinzulinken muß...  Was Dir genau fehlt, mußt Du
mal selbst herausfinden.

Eine ungelöste Referenz kann man auch durch -u verursachen (und damit
das Linken des entsprechenden Bibliotheksmoduls erzwingen).

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde mal "selektives Weglassen" der objectfiles ausprobieren
g.
Eigenlich müsste es aber doch mindestens eine ungelöste Referenz geben,
da sonst der Code ja laufen würde...

grübel

Danke für's draufschauen jedenfalls!

Gruß,
Patrick...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurze Aufklärung:

In der libc.a befinden sich sog. "dummy-hooks" der Funktionen, die
dann tatsächlich in der newlib-lpc.a implementiert wurden!
Beim erzeugen der libc.a sollte man über einen switch im Makefile
angeben, daß diese Funktionen vom "Portierenden" bzw "Anwender"
bereitgestellt werden. Näheres dazu in der Yahoo-Group, bald im Wiki
oder auf Nachfrage poste ich es nochmal hier.

Thanks for help!

Gruß,
Patrick...

Autor: Jogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ich habe auch gerade probleme mit dem Einbinden von Lib
und zar will ich die vom I2C Bus einbinden jetzt wollte ich fragen
welch einstellung ich vornehmen muß und wo an welcher stelle auch im
Mfile?
MFG jogi

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.