Kleine Linker Frage



  • Hey Leute.
    Ich habe eine kurze frage zum Linken.

    Und zwar nähmen wir mal an wir haben follgenden Code.
    Dieser Code geht Compielieren und zwar zu einer dll (erfolgreich).

    MyDLL.h

    #ifndef MyDLL_H_
    #define MyDLL_H_
    
    #ifdef DLL_EXPORT
    #define DLL __declspec(dllexport)
    #else
    #define DLL __declspec(dllimport)
    #endif
    
    DLL void Call_My_DLL();
    
    #endif // MyDLL_H_
    

    MyDLL.cpp

    #include <iostream>
    #include "MyDLL.h"
    
    void Call_My_DLL()
    {
        std::cout << "Hey DLL!^^" << std::endl;
    }
    

    Ich weiß auch wie ich diese DLL in einem Projekt verwende.
    Ich weiß auch wie ich sie dynamisch Linken kann, z.b indem ich dem Linker die *.a Datei (LIB) mitgebe. So geht alles wunderbar.

    Doch was ist jetzt, wenn ich diesen Code doch statisch Linken will?
    Was muss ich machen, damit die dll statisch in die exe eingebunden wird?

    GUI's wie wxWidgets oder Qt können ja auch statisch als auch dynamisch gelinkt werden und sind denoch so aufgebaut wie DLL's, oder welchen Trick haben die dabei?

    Mfg Wikinger75!



  • Du musst deine Lib statisch komplilieren (die *.lib wird jetzt auch grösser als wenn *.lib und *.dll vorhanden sind) und dann linkst Du die *.lib dazu.

    Also keine DLL sondern eine LIB.

    Simon



  • Ahso funktioniert das.
    Also damit ich das richtig verstanden hab.

    Um dynamisch Linken zu können stelle ich den Linker so ein, das er mir eine MyDLL.a und eine MyDLL.dll auspuckt. Diese benutze ich zum dynamischen Linken.

    Um die möglichkeit des statischen Linkens zu geben muss ich den Linker so umkempeln das er mir beim Linken nur eine MyDLL.lib ausgibt.

    Ist das so richtig?

    Mfg Wikinger75!



  • Ja, bzw. eine MyDLL.a (*.lib ist beim MSVC Compiler).


Anmelden zum Antworten