VS08 und Lib Abhängigkeiten



  • Hallo,

    wenn ich normalerweise auf eine dll dynamisch linken möchte, includiere ich deren Header-Datei in der Header-Datei meines Programmes, gebe den Pfad in das Includeverzeichnis mit an und gebe dem Linker den Namen der ".lib" in den zusätzlichen Abhängigkeiten und den Pfad zur ".lib" in den zusätzlichen Bibliotheksverzeichnissen mit. Die dll an sich liegt in einem Verzeichnis, das im PATH enthalten ist.
    Beim Compilieren der App mit VS08 bekomme ich in der Debug-Version eine Abhängigkeit zu der DLL, in der Release allerdings nicht. Andere DLLs, die eingebunden sind, werden in beiden Versionen gleich gelinkt (tauchen in den Abhängigkeiten auf). Weder Google noch MSDN haben mir hierfür bisher eine Antwort geben können.
    Bei einer Kompilierung mit MingW (ohne MSVS) habe ich wiederum die Abhängigkeit im Release drin.

    Bin dankbar für jeden Tipp

    Alexander


  • Mod

    In der Releaseversion werden Programmteile, die nicht benutzt werden entfernt. Inkl. Beziehungen, die nicht benötigt werden.
    Solange Du diese DLL bzw.LIB nicht benutzt (keine Methode aus ihr verwendest) wird auch die Abhängigkeit entfernt.



  • Wenn ich jetzt aber sage, dass ich einige Definitionen und einen Methodenaufruf daraus verwende?
    Könnte es theoretisch sein, dass die nicht gelinkt wird, da die noch irgendwelche Debug-Informationen enthält, was die eigentlich nicht beinhalten sollte?


  • Mod

    Wenn diese Methoden inline sind und keinen Bezug auf die Lib haben oder einfach nur Nutzung von Deklarationen sind, dann ist keine Referenz nötig.

    Bau mal eine Messagebox ein, ob das Programm überhaupt an dieser Stelle vorbeikommt.

    Der Linker schmeißt nichts weg, was zur Ausführung benötigt wird. Evtl. wird Dein Code auch vom Compiler entfernt...



  • Vielleicht hilft das irgendwie weiter ... wie gesagt, ich verstehe leider wirklich nicht, warum das hier so nicht funktioniert wie bei den anderen Libs, die ich eingebunden habe. Ich habe mir unter Linker ein Mapping ausgeben lassen. Und das ist die Ausgabe:

    0001:00000010       _libvlc_exception_raised   00401010     libvlc:d000033.o
     0001:00000018       _libvlc_media_release      00401018     libvlc:d000162.o
     0001:00000020       _libvlc_media_player_new_from_media 00401020     libvlc:d000144.o
    

    Was mich verwundert sind die Angaben der libvlc:*.o, denn bei den anderen Libs sieht es so aus:

    0001:00000932       ?invalidate@QBoxLayout@@UAEXXZ 00401932 f   QtGui4:QtGui4.dll
    

  • Mod

    Nun, das ist evtl. eine statische LIB und keine DLL Lib!


Log in to reply