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


von Frank (Gast)


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

von Schoaschi (Gast)


Lesenswert?

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

von Rufus T. Firefly (Gast)


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ß!

von René König (Gast)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.