www.mikrocontroller.net

Forum: Compiler & IDEs Bibliothek Funktion beim linken nicht gefunden


Autor: Thomas Motz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe versucht, eine Bibliothek (mit avr-ar erzeugt) mit dem
main-Programm zu linken.

Die einzige enthaltene Lib-Funktion 'set_time' kann ich mit
avr-objdump in der lib-Symbol-Tabelle auch finden.

Beim Linken mit main kommt dann die Fehlermeldung
/main.c:18: undefined reference to `set_time'
so, als sei die Funktion in der Lib nicht vorhanden.

Zunächst hatte ich es unter Win2K probiert, nach dem Wechsel auf einen
Win98SE Rechner hat es dann gestern zunächst funktioniert.
(Dummerweise habe ich mir die zu diesem Zeitpunkt kompilierte Lib nicht
aufgehoben)

Nach einer Veränderung der Lib kam dann plötzlich wieder die obige
Fehlermeldung.

Hat jemand eine Idee, was bei der Erzeugung der Lib oder beim Linken
da schiefgeht?

Danke und Gruß
Thomas

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne vollständige Kommandozeile, die zum Linke benutzt wird, ist das
nicht zu ermitteln.  Insbesondere solltest Du daran denken, daß
Bibliotheken vom Linker nur dazu benutzt werden, offene
Symbolreferenzen aufzulösen, d. h. er bindet einen Objektmodul einer
Bibliothek dann und nur dann ein, wenn dieser Modul eine bislang
unbekannte Referenz befriedigt.  Da die Objektmodule und Bibliotheken
in der Reihenfolge ihres Auftretens im Linker-Kommando abgearbeitet
werden, müssen sinnvollerweise alle explizit benannten Objektmodule
(*.o Dateien) vor allen Bibliotheken stehen, da es ja die .o's sind,
die die offenen Referenzen erstmal erzeugen müssen (sieht man von der
Möglichkeit mal ab, mit -Wl,-u... zwangsweise eine offene Referenz zu
erzeugen).

Außerdem ist natürlich noch die Frage, wie die Bibliothek erzeugt bzw.
nach der Änderung aktualisiert wird, auch dabei könnte man was flasch
machen: wenn Du bspw. beim Aktualisieren eines Moduls aus Versehen die
ganze Bibliothek neu anlegst, in die neue Bibliothek aber nur noch den
aktualsierten Modul aufnimmst, wären hernach alle anderen Moduln
(logischerweise) nicht mehr drin enthalten.

Autor: Thomas Motz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Jörg, Du liegst natürlich richtig. Die Reihenfolge war es.
Habe es gerade ausprobiert (mit leichter Schamesröte im Gesicht...)

Aufgrund des zweiten Tipps lese ich mir aber gleich noch mal das Manual
durch.

Gruß
Thomas

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.