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
wieso machst du nicht ein c-file und eine header datei und includierst diese immer?
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ß!
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.