[erledigt]Mehrere Bibliotheken mitliefern



  • Hallo,

    in einem Projekt benutze ich eine Bibliothek (taglib), die ich von Unix auf Windows portieren konnte (nach langem Kampf). Die Bibliothek wird als lib-Datei von meinem Projekt eingebunden, welches dann als DLL ausgegeben wird. Diese DLL möchte ich nun auf einem anderen PC benutzen, doch dort wird sie vom entsprechenden Programm einfach nicht geladen. Der einzige Unterschied zwischen den beiden PCs ist, dass Visual Studio 2010 auf dem PC, auf dem die DLL nicht geladen wird, nicht installiert ist. Wie kann man die Visual Studio Bibliotheken nun in die eigene DLL einbinden?

    Danke,
    Martin



  • Die CRT statisch linken.
    Bei VS in den Projekteinstellungen zu finden unter c/c++ -> codegenerarion -> runtime library.



  • danke!



  • Hi,

    ich muss doch noch einmal nachhaken, bei einem ähnlichen Problem.
    Ich benötige zur Ausführung des Programms immer noch eine tag.dll Datei, die ich mal erstellt habe. Kann man diese Datei irgendwie in das Projekt einbinden, sodass nur eine einzige Datei ausgegeben wird und ich die tag.dll nicht mehr benötige?

    Danke!



  • Also zuerst einmal: CRT statisch linken ist keine gute Lösung. Besser solltest du die CRT dynamisch linken und am Zielrechner die entsprechende Redistributable installieren.

    Und was deine tag.dll angeht: Offenbar hast du dein taglib eben in eine dll gebuildet und linkst sie also dynamisch. Wenn du sie statisch linken willst musst du dir eben eine statische Version der taglib bauen und keine dll...



  • Das mit dem Redistributable habe ich schon herausgefunden, danke! 🙂

    Mh das habe ich bereits und der Linker hat die tag.lib als Anhängigkeit eingetragen. Dennoch wird mein Programm ohne die tag.dll nicht ausgeführt...Dependency Walker meldet die tag.dll dann auch als fehlende Datei. Jedoch habe ich in meinem Programm nirgendwo ein "extern "C" __declspec(dllimport)" oder "DLL int funktionIrgendwas(void)". Nun weiß ich jedoch nicht genau, was in der tag.lib steht, da ich die Bibliothek von Unix auf Windows portiert habe. Also: Kann die lib-Datei überhaupt verursachen, dass die dll immer benötigt wird? Oder gibt es eine Compiler/Linker-Option, die ich versehentlich mal umgestellt haben könnte?



  • Da du die Bibliothek von Linux nach Windows selbst portiert hast musst du doch wissen ob du nun eine dll oder eine statische Bibliothek gemacht hast!? Ich vermute dass es sich um eine dll handelt und die .lib die du linkst lediglich die Importlib der dll ist die eben dafür sorgt dass der linker weiß welche Funktionen in der dll sind und die dll und ihre Funktionen in die Import Table der exe einträgt...



  • es ist schon lange her, sry 😃 Dann wird es so sein wie du sagst, da kann ich dann also nichts mehr machen außer die Bibliothek neu zu kompilieren?



  • Wenn du statisch linken willst brauchst du eine statische Bibliothek, also ja. Oder eben die dll mitliefern^^



  • okay, vielen Dank!



  • wow, ich hab es hinbekommen - sogar mit zwei Bibliotheken! 😃 danke!


Log in to reply