Der Linker findet die Funktion in *.lib nicht !!



  • Zurzeit programmiere ich in Microsoft Visual C++ 6.0

    ich will eine DLL in C erstellen die aber auf die Funktionen von einer einderen in C++ erstellten DLL zugreifen soll.

    Z.B ich will auf eine Funktion aus der C++ DLL (ML5DLL.dll) zugreifen.

    void InitDynamicData(ML5DataDynamic* Data)
    

    Dann erhalte ich immer wieder folgende Fehlermeldung:

    DLLAdapterNeu.obj : error LNK2001: Nichtaufgeloestes externes Symbol _InitDynamicData
    

    Nun habe ich, meiner Meinung nach, den Übeltäter gefunden. 😡
    In der ML5DLL.lib steht anstatt

    InitDynamicData(ML5DataDynamic)
    

    folgendes

    NUL?InitDynamicData@@YAXPAUML5DataDynamic@@@ZNUL__imp_?InitDynamicData@@YAXPAUML5DataDynamic@@@ZNUL
    

    So wie ich verstehe sucht der linker nach der Funktion in lib-Datei und findet die wegen der Zusatzzeichen nicht. Oder ?! 🙄

    Was soll man machen damit die Zusatzzeichen in .lib-Datei nicht erscheinen oder damit Linker die Funktionen finden kann ???? 😕

    Danke im Voraus



  • Du musst der Funktionsdeklaration extern "C" voranstellen:

    extern "C" void meineFunktion();
    

    Du kannst auch einen extern "C" Block verwenden (geschweifte Klammern), in dem sämtliche exportierten Funktionen aufgeführt sind.

    EDIT: Ach ja, und exportieren musst du sie natürlich auch: http://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx



  • Ich weiß nicht ob du hier auf das Problem stößt aber wenn du folgende Konstellation hast:

    Programm nutzt DLL
    DLL nutzt LIB
    DLL linkt LIB nicht
    Programm linkt LIB

    Dann heißt das noch lange nicht das die Funktionen aus der LIB in dem Programm drin sind, denn das Programm linkt nur, was es auch benutzt. So wird das Programm abstürzen sobald die DLL die Funktionen nutzen möchte. Dann entweder die LIB in die DLL linken oder dem Linker sagen das er alles, egal ob genutzt oder nicht, von der LIB in das Programm linken soll.


Anmelden zum Antworten