www.mikrocontroller.net

Forum: PC-Programmierung Leitfaden für Bibliotheks-Erstellung


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kennt jemand einen Link, wo das Erstellen eigener C-Bibliotheken
erklärt wird? Ich tue mich da mit dem Anfang etwas schwer.

Zum Beispiel habe ich ein C-Modul, in dem alle Routinen für ein
bestimmtes Aufgabengebiet stehen. Damit später aus der Lib immer nur
die benötigten Funktion gelinkt werden, muss ich ja erstmal für jede
Funktion ein eigenes Modul anlegen, richtig? Ich arbeite aber mit
bedingter Compilierung, einstellbar über Werte im H-File. Werden diese
Werte denn auch bei einer Lib korrekt berücksichtigt? Oder muss ich für
jeden Fall eine eigene Lib anlegen???

Frank

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso machst du nicht ein c-file und eine header datei und includierst
diese immer?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird er nicht tun, weil der Linker nicht auf Funktionsebene linkt.
Somit würde bei Deinem Vorschlag immer der gesamte Code dazu gelinkt,
selbst wenn nur eine banale winzige Funktion daraus benötigt wird.
Das ist -soweit ich weiß- nur bei einigen Pascal-Derivaten anders, aber
diese verwenden auch keine echten Objektdateien und haben ein völlig
anderes Linkerkonzept.

Nee, Frank hat das schon ganz richtig erkannt: Jede einzelne Funktion
in ein einzelnes Sourcemodul (C-File). Eine gemeinsame Headerdatei ist
allerdings zulässig.

Wenn durch die bedingte Compilation unterschiedliche Objektdateien
erzeugt werden, dann wird nur die jeweils so compilierte Objektdatei in
der Library abgelegt.
Du wirst also für jede einzelne Kombination Deiner Werte (im .h-File)
eine eigene Library erzeugen müssen.

Eine Alternative wäre die Verwendung unterschiedlicher Funktionsnamen
für die unterschiedlichen Kombinationen (mit Präfixen o.ä.) und
Hmdefinieren per Headerdatei auf den jeweils zu verwendenden
Basisnamen. Auch die Funktionsnamen im Sourcefile müssen gewissermaßen
"dynamisch" erzeugt werden, so daß der resultierende Name ein den
aktuellen Bedingungen entsprechendes Präfix erhält.

Dann wirst Du allerdings einige Klimmzüge im Makefile anstellen  oder
aber ohne Makefile mit einem Skript compilieren müssen; schließlich
muss jedes Sourcefile für jede mögliche Kombination Deiner Bedingungen
übersetzt werden.

Endergebnis ist dann eine recht große Library, aus der aber tatsächlich
nur die jeweils benötigten Funktionen entnommen werden.

Viel Spaß!

Autor: René König (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das wird er nicht tun, weil der Linker nicht auf Funktionsebene
linkt.

Von welchem Linker sprichst Du? Der MS-Linker macht das mit gesetztem
Switch /OPT:REF auf jeden Fall, sofern bereits beim Compilieren mit /Gy
gearbeitet wird. Das funktionierte selbst beim alten VC6 bestens, IIRC.


> Jede einzelne Funktion in ein einzelnes Sourcemodul (C-File).

Wird das nicht ein wenig unübersichtlich?

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.