Linkerfehler in statischer C++ Lib



  • Guten Tag!

    Ich habe hier einen Linkerfehler, den ich nicht nachvollziehen kann:

    Manager.lib(Surface.obj) : error LNK2019: unresolved external symbol "void __cdecl dataSetModifiers(int)" (?dataSetModifiers@@YAXH@Z) referenced in function "public: virtual void __thiscall Open::Surface::calcData(void)" (?calcData@Surface@Open@@UAEXXZ)

    Zur Erklärung: Ich baue eine statische Lib namens Manager.lib. In diese wird auch die Source-Datei Surface.c reinkompiliert. Die Manager.lib wird ohne Fehler erstellt.

    Jetzt will ich eine .exe bauen und linke dazu die Manager.lib hinzu. Dann kriege ich jedoch obigen Linkerfehler. Es sieht so aus als wäre der Linkerfehler im Code der Lib selber und nicht in meinem .exe Code.

    Der Linkerfehler tritt ja auf calcData() und diese Funktion ist in Surface.c - das ist eine Datei die in die lib kommt. In dieser Funktion findet er nun offenbar nicht dataSetModifiers(), aber diese Funktion steht in mgr.c und diese Datei wird ebenfalls in die .lib reinkompiliert! Wie kann eine Funktion der lib nicht eine andere Funktion der lib finden? 😕



  • linker3 schrieb:

    Wie kann eine Funktion der lib nicht eine andere Funktion der lib finden? 😕

    Ganz einfach: indem die nicht gefundene Funktion einfach nirgends definiert ist.
    Dass der Fehler dann erst beim Verwenden der LIB und nicht schon beim Erstellen kommt ist by design.



  • Die Funktion ist aber definiert in dem .lib Project. 😞



  • Vergleiche noch mal genau die Headerdatei und den Sourcecode bzgl. dieser Funktion - ich tippe auf einen Schreibfehler im Sourcecode 😉


Log in to reply