static library



  • hallo,
    ich will eine shared library aus einer static library und einer quelldatei bauen. in der static library befinden sich die funktionen init und destroy. von den beiden funktionen werden die funktionen plugin_init() sowie plugin_destroy() aufgerufen. die beiden funktionen sind allerdings noch nicht implementiert - es besteht also nur der funkionskopf der beiden funktionen in eienr header datei - ich will, dass diese funktionen in der quelldatei implementiert werden müssen.

    das kompilieren der shared library aus static library und quelldatei funktioniert - allerdings werden, wenn ich die shared library mit nm anschaue, die funktionen init und destroy nicht aufgeführt und deshalb auch nicht aufgerufen wird. das liegt irgendwie daran, dass ich sie als static library dazu gelinkt habe. weiss jemand wie ich die funktionen aus der static library auch "öffentlich" mache?

    danke,
    blan



  • Hey blan

    Ich weiss jetzt nicht genau, wie du das meinst. Um Funktionen zu deklarieren verwendet man normalerweise Header-Dateien - sprich, deine nur-Funktionskopf-Deklaration befindet sich in einer eigenen Header-Datei.

    Diese Header-Datei inkludierst du dann sowohl bei der Implementationsdatei deiner Library als auch beim fertigen Programm, wobei du bei letzterem beim Linken einfach noch die Library zusätzlich angeben musst.

    Dasselbe gilt natürlich auch dann, wenn du anstatt eines ausführbaren Programms eine shared library kreierst. Deklarationen in der Library selbst machen nur wenig Sinn, denn die wird erst beim Linken hinzugefügt - der Compiler muss die Deklaration der Funktion aber bereits zuvor haben, sonst muckt er.

    Greeetz
    Kessi



  • Wenn Du beim Linken von static Libraries möchtest, dass auch unbenutzte Symbole im- und damit wieder exportiert werden, hilft evtl. der Linkerparameter --whole-archive (oder beim Compiler -Wl,--whole-archive).


Anmelden zum Antworten