Forum: Compiler & IDEs Linkerproblem mit Library


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von OldBug (Gast)


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...

von Jörg Wunsch (Gast)


Lesenswert?

Linker-Kommandozeile?

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

von OldBug (Gast)


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...

von OldBug (Gast)


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

von Jörg Wunsch (Gast)


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).

von OldBug (Gast)


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...

von OldBug (Gast)


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...

von Jogi (Gast)


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]
  • [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.