Statische Lib zu statische Lib Projekt dazulinken



  • Hallo,

    also was ich vorhabe ist folgendes:

    Ich habe eine Klasse, die ich immer wieder in anderen Projekten der Projektmappe benötige. Um nicht die einzelnen cpp Dateien 5 mal parallel zu haben, habe ich die Klasse, die ich öfter benötige in ein statische Lib Projekt gelegt (sagen wir Modul 1 .lib).
    Jetzt benötige ich diese Modul1.lib jedoch in einer anderen statischen lib, sagen wir Modul2.lib. Im Projekt Modul2.lib habe ich die header Modul1.h NUR included, also nicht im Projket enthalten.

    Beim Übersetzen von Modul2.lib kommt Fehler LNK2019, also dass er Funktionen, die in MOdul1.lib enthalten sidn nicht finden kann.

    Wie kann ich dieses Problem lösen?

    Danke.



  • Im Projekt Modul2.lib habe ich einen Projektverweis auf Modul1.lib bei den Projekteigenschaften eingefügt, der aber anscheinend auch nix bringt.

    Danke.



  • Das geht nur auf der Kommandozeile mit

    lib /OUT:filename.lib input1.lib input2.lib



  • Erstmal danke für die Antwort.
    Ich habe es mit Projektabhängigkeiten und Verweisen hinbekommen. Die Ursache für den LNK2019 war folgendes:

    ich habe in der modul1.lib eine Funktion wie folgt:

    //in header modul1:

    template <class T> int fkt1(T value);
    in cpp modul1:
    template <class T> int fkt1(T value)
    { return 0;}
    

    //Haupanwendung

    #inlcude "modul1.h"
    
    int main(void)
    {
     int x = 5;
     fkt1(x); //LNK2019
    }
    

    Ohne Templates geht es, aber ich muss die Funktionen in der .lib mit templates machen. Wieso versteht der Linker die templates nicht aus der Anwendung heraus ???



  • Templates kann man *nicht* in eine LIB packen, sondern diese *müssen* immer im Header direkt (inline) implementiert werden. Dann brauchst Du auch keinen LIbs mitzuliefern...

    Templates werden zur *Compilezeit* erzeugt! Somit kann sie der Compiler nicht schon erzeugen, wenn er sie noch gar nicht kennt... Du kannst auch "template-spezializations" machen, aber das hilft oft auch nicht...

    Das ist der Unterschied zu (.NET) "Generics"...


Anmelden zum Antworten