Leitfaden für Bibliotheks-Erstellung

Gast #200655
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
Gast #200657
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ß!
Gast #200658
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren