redist vermeiden



  • Hallo
    derzeit müssen Anwender:

    http://www.microsoft.com/de-de/download/details.aspx?id=14632

    installieren. Warum? Wie kann ich das vermeiden in VC2010 express?
    Danke



  • /MT oder /MD verwenden (entsprechend Multithreaded oder Multithreaded Debug in den allgemeinen Projekteinstellungen). Damit wird dann aber deine exe größer und Deine Kunden bekommen keine Sicherheitspatches für die entsprechenden Komponenten.



  • Danke, aber ich verwende bereits /MD (Multithreaded DLL) da ich ein Plugin kompiliere.



  • Erm, sorry, statt /MD meinte ich /MTd ... man sollte sein Gedächtnis im Griff haben. Dass Du eine Plugin-DLL erstellst, hättest Du aber durchaus früher erwähnen dürfen, hier fischt man echt im Trüben... Wenn eine DLL die statische C++ Runtime mitbringt, kann das zu Problemen führen wenn die Host-Applikation dynamisch gelinkt ist, siehe Doku. Dann bleibt nur noch, dieselbe Runtime zu verwenden, also die gleiche Compiler-Version.



  • Hallo mike4,

    siehe /MD, /MT, /LD (Use Run-Time Library) bzw. Static and Dynamic Linking of C Runtime Libraries with VS2010
    Um also statisch zu linken, mußt du "/MT" benutzen.

    Edit: dein Programm selbst ist ein Plugin? Dann mußt du zwingend (wie Decimad schon geschrieben hat), dieselbe Runtime wie die Host-Applikation verwenden (ich hatte erst gedacht, dein Programm würde eine andere Plugin-DLL einbinden).



  • Ja es ist ein X-Plane plugin welches aber selbst curl und sdl verwendet. Keine Ahnung mit was X-Plane kompiliert wurde, zudem gibt es eh immer Updates. Eigentor für M$ da ich dann halt Eclipse verwenden muss?



  • Hast Du es denn wenigstens mal mit /MT versucht? Ich kann mir irgendwie nicht vorstellen, dass Eclipse es besser hinbekäme...


  • Mod

    Anmerkung:
    Je nachdem wie die Addins funktionieren und das Interface gebaut ist ist es NICHT nötig, dass die selbe Runtime verwendet wird.
    Wenn PODs verwendet werden und reine pure Interfaces und Zeiger, die kein new/delete in anderen Modulen fordern kann man eigentlich machen was man will.



  • Mit /MT hat es immer noch msvcp80 etc. oder so im dependency walker. Kann man das irgendwie testen?


  • Mod

    Verwendest Du andere Libraries, die diese benötigen.
    Diese Datei wird immer benötigt wenn eine Deiner Objektdateien mit /MD kompiliert wurde.



  • mike4 schrieb:

    Mit /MT hat es immer noch msvcp80 etc. oder so im dependency walker. Kann man das irgendwie testen?

    msvcp80 ist die C++ Runtime Library von Visual-Studio 2005. Du verwendest nach
    eigenen Angaben
    aber VS2010. Die dll wird vermutlich von anderen eingebundenen Quellen verwendet.

    Es wäre evtl. ratsam alles mit der gleichen C++ Version STATISCH zu erstellen bevor man es zusammenlinkt.
    Module die dynamisch dlls nachladen werden sich davon sonst nicht einfach abbringen lassen.

    Was wird denn sonst noch als lib eingebunden ?



  • sdl, sdl_image und curl. Ich habe irgendwie keine Lust sowas zu kompilieren, nur schon curl braucht etliche dlls.
    Mit mingw64 habe ich einen segfault:

    http://www.c-plusplus.net/forum/315437

    Danke


  • Mod

    Du musst schon dafür sorgen, dass die Libs in dem selben System kompiliert werden und mit den entsprechenden gleichen Compiler Einsetllungen.

    Auch wenn Du dazu keine Lust hast.
    Mixed Runtime Loads von CRTs sind das Übelste was man ausliefern kann.



  • Ich verwende ein halbes Dutzend dlls. Es meinte nur einer, dass es ein Problem mit einem neueren redist (2012?) gebe... /MT bei Problemen...ms go home, sollen sie halt Linux installieren.
    Noch Ideen zum mingw64 segfault?


  • Mod

    Und wenn du 20 Dlls verwendest oder nur eine.
    1. Kannst Du mit DEPENDS exakt die Abhängigkeit sehen.
    2. Würde ich mich nie auf die Builds verlassen, die ich von einem Paket geliefert bekomme.
    3. Verstehe ich nicht was Du mit Deinem letzten Kommentar meinst.



  • Im dependency walker sehe ich msvcr80.dll. Wie löse ich das nun am einfachsten?
    - Gehe ich recht in der Annahme dass ich das am einfachsten in vc2008 mit /MT kompilieren kann?
    Hmm ich habe gerade vc2008 express installiert.
    - Dann brauche ich neben 32bit auch 64bit. Was muss ich denn nachinstallieren. Derzeit bekomme ich etwa sowas wie: target x64 mismatchs machine win32.
    Vielen Dank
    Michael


  • Mod

    Man kann Libriaries auch mit neueren Compilern neu kompilieren.

    Was ist denn Dein Ziel?
    Alle DLLs auflösen?

    Wenn Du schon x-DLLs hast. Was stört Dich an dem redistributable Paket?



  • mike4 schrieb:

    Ich verwende ein halbes Dutzend dlls. Es meinte nur einer, dass es ein Problem mit einem neueren redist (2012?) gebe... /MT bei Problemen...ms go home, sollen sie halt Linux installieren.
    Noch Ideen zum mingw64 segfault?

    Immer wieder lustig wenn eigene Unwissenheit dazu führt, dass irgendwer "nach Hause gehen" soll. Das Problem hättest Du in der Art unter Linux genauso. Nur vermutlich kennst Du Dich mit Linux noch weniger aus, so dass Du noch nichtmal merken würdest welche Shared Objects das so läd.


Log in to reply