Statisches Linken



  • Hallo
    Ich habe noch ein Problem mit dem statischen Linken. Ich verstehs einfach nicht.
    Also ich hab ein Projekt mit einer Bibliothek die gegen MT(d) also statisch linkt.
    Aus diesem Grund muss ich in meinem Projekt die Laufzeitbib. auf MT bzw Mtd einstellen.

    Ist es jetzt so, dass ich viele andere Bibliotheken nicht mehr benutzen kann weil diese dynamisch linken? Oder gibt es zu jeder dynamisch linkenden Bibliothek ein statisch linkendes Pendant?
    Ich befürchte die Fragen sind ein bißchen dämlich aber ich kenn mich damit leider absolut nicht aus.
    Ist es so dass ich keine .dll einbinden kann weil diese dynamisch sind? Also zB #using <xyzlib.dll>

    Danke für eure Hilfe
    Gruß Zaus


  • Mod

    Bibliotheken zum dynamischen und statischen Linken unterscheiden sich, ja. Sehr oft kommen Bibliotheken aber mit Versionen für beide Zwecke oder (falls man sie selber compiliert) bieten eine entsprechende Option. Dein Linker wird sich schon beschweren, wenn er keine passende Bibliothek findet.



  • Also dämlich ist die Frage keines Falls. Ist nämlich wirklich ein komplexes Thema, vorallem unter dem MSC.
    Der Knackpunkt ist gar nicht das statische Linken ansich. Du kannst z.B. eine statische Lib benutzen, wenn die Runtime eine DLL. Aber wichtig ist, womit die statische Lib gebaut wurde! Wenn sie gegen eine andere Runtime gebaut wurde, ist die Hölle los!

    Du mußt also darauf achten, gegen welche Runtime die Libs und natürlich deine eigenen Projekte gebaut wurden. Um es auf den Punkt zu bringen: alles muß gegen die gleiche Runtime gebaut werden. Was heißt gleiche Runtime?
    1. Single- oder Multithreaded? (heute gibt es aber von MS eh nur noch MT)
    2. Version
    3. Release oder Debug?
    4. Statisch oder dynamisch



  • Vielen dank für eure Antworten.
    Wie kann ich denn herausfinden gegen welche Runtime eine vorhandene Bibliothek gebaut ist? Ich weiss nur, dass sie statisch und Multithreaded ist.
    Was genau meinst du mit Debug oder Release. Stell ich nicht bei den Projekteigenschaften bei Debug auf MTd und bei Release auf MT? Mir wurde gesagt das 'd' steht für Debug.


Log in to reply