mfc42ud.dll release version
-
wenn ich meine Applikation als Debug kompiliere, dann brauche ich die dll um das programm überhaupt zu starten
aber in release dann nicht, wieso? es ist doch dll, es muss ja beim starten vorhanden sein, wieso release version nicht? d.h. in xp ohne irgend mfc stuff kann ich das programm in release starten. ich vermuten die dll ist in user32.dll drin, ist es so?
-
mfc 42 u(nicode) d(ebug).dll
zur laufzeit brauchst du eine dll ohne das d, also zb eine mfc42.dll, und die ist auf fast jedem rechner zu finden.
oder du hast in der release auf statisches linken umgeschaltet, dann kommst du ganz ohne dll's aus!
-
Die mfc42u.dll ist ab Win2000 (also auch XP+Vista, glaube sogar auch NT4) bereits vorhanden.
Du brauchst diese also nicht mehr installieren.Die Debug-Variante mfc42ud.dll darfst du eventuell nicht verteilen. Diese wird nur mit Visual Studio installiert, ansonsten ist diese auf PCs nicht vorzufinden.
Solltest du mit VS 2005 oder 2008 entwickeln, dann benötigt dein Programm z.B. mfc71u.dll oder mfc80u.dll, diese musst du dann mit ausliefern.
Am einfachsten ist das statische Linken (unter Projekteinstellungen, MFC statisch), dann werden die Programmteile mit in deine .EXE verpackt.
-
was ich hinaus will, ist ein debug version von meiner Applikation erzeugen, dann in einer Umgebung ohne diese Dll laufen zu bekommen. Weil ich weiss nicht, ob die Dll bestimmte Lizenz hat, kann man nicht einfach so kopieren, dann zu dritter Person, wer kein VS installiert hat, schicken.
Am einfachsten ist das statische Linken (unter Projekteinstellungen, MFC statisch), dann werden die Programmteile mit in deine .EXE verpackt.
auch bei Debug version, zwar UNICODE?
-
Ja man kann auch eine Debug Unicode Version statisch linken...
Warum willst Du eine Debug-Version weitergeben?
-
Martin Richter schrieb:
Warum willst Du eine Debug-Version weitergeben?
es ist nicht meine Entscheidung, und wenn ich auf mfc static link umschalte, bekomme ich viele errors, z.B.
afxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj) MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _vsprintf already defined in LIBCMTD.lib(vsprintf.obj) MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)
-
Ein oder mehrere Teile Deines Projekts sind noch mit der Einstellung kompiliert, die CRT dynamisch zu linken. Daher die Linkerfehler.
-
d.h. manche mit static, manche mit dynamic, wie kann ich crt auch als static einstellen?
-
Alle entsprechenden Libraries, die Du verwendest müssen eben auch umgestellt werden, bzw. Du musst die passenden LIB Dateien verwenden.
-
Da du mfc42u verwendest gehe ich mal davon aus, dass du VC 6.0 verwendest.
Um auch die C-Runtime statisch zu linken gehen im Menü "Projekt" - "Einstellungen", Tab "C/C++", Auswahlbox auf "Code Generation" und dann Laufzeitbibliothek NICHT auf "xxx DLL" stellen, sondern auf das gleiche ohne "DLL".Hinzugefügte Bibliotheken die unter "LInker" - "Eingabe" stehen, müssen mit den gleichen Einstellungen kompiliert werden.
-
ich habe settings geändert:
use mfc static libary
und alle als Debug multithreaded einstellt
trotzdem:uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib
-
Bin mir nicht sicher, aber eventuell liegts an den Einstellungen der vorkompilierten Header.
Für VC6: Gehe in Projekteinstellungen und öffne im Baum die Quellcodedateien (.cpp).
Gehe auf stdafx.cpp und im Tab "C/C++" auf "Vorkompilierte Header", dort müsste "...PCH erstellen" und "stdafx.h" stehen.
Klicke alle anderen .cpp-Dateien im Baum an und kontrolliere ob unter "Vorkompilierte Header" überall "... PCH verwenden" und "stdafx.h" steht (sonst ändern).