C kompilierte *.exe läuft nicht auf anderen PCs - VisualStudio 2010 Ultimate

DrToxic

Rear Admiral
Registriert
Juni 2008
Beiträge
6.068
Hi,

ich hab hier ein kleines Problem, das ich nicht gelöst bekomme.

Und zwar programmiere ich nun mit Microsoft VisualStudio 2010 als Entwicklungsumgebung in C, möchte aber meine fertigen Programme trotzdem gern auch an andere Leute schicken, damit die mal drüber gucken, was man besser machen könnte, ob irgendwelche Fehlermeldungen unverständlich sind etc. - man sieht ja irgendwann selber den Wald vor lauter Bäumen nicht mehr ;)

Nur habe ich jetzt das Problem, dass auf anderen Rechnern die Fehlermeldung "msvcr100.dll nicht gefunden/installiert" kommt. Bei Microsoft steht dazu unter C Run-Time Libraries (CRT) das hier:

msvcrtd.lib


msvcr100d.dll


Multithreaded, dynamic link (import library for MSVCR100D.DLL) (debug).


/MDd


_DEBUG, _MT, _DLL

So wie das aussieht, wird diese *.dll also zum debuggen von C-Code gebraucht.

Aber warum? Ich habe beim Kompilieren in VisualStudio extra "Release" und nicht "Debug" angegeben, d.h. er sollte das Programm doch komplett in Maschinensprache kompiliert haben und gar keine C-Libraries mehr benötigen.

Oder habe ich da etwas Grundlegendes falsch verstanden? :confused_alt:
 
Aber warum? Ich habe beim Kompilieren in VisualStudio extra "Release" und nicht "Debug" angegeben, d.h. er sollte das Programm doch komplett in Maschinensprache kompiliert haben und gar keine C-Libraries mehr benötigen.

Das kommt darauf an, ob zu statisch oder dynamisch linkst.

Das steht doch auch da:

Multithreaded, dynamic link (import library for MSVCR100.DLL). Be aware that if you use the Standard C++ Library, your program will need MSVCP100.DLL to run.
Quelle: http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx (dein Link ;) )
 
Das steht auch auf deiner Seite ;) Du musst da in den Projekteigenschaften entsprechend die Runtime Library ändern. Bei den Projekteigenschaften unter Configuration Properties/"C/C++"/Code Generation auf /MT bzw. /MTd stellen.

Weitere Infos: http://support.microsoft.com/kb/154753


Gruß,

badday
 
Zuletzt bearbeitet:
Ok.. Ich bin mir aber immer noch nicht ganz sicher, ob ich's verstanden hab, auch wenn es jetzt klappen sollte :D


"static link: Applications compiled with this option are statically linked to MSVCRT.lib"
Und wenn der PC, auf dem das ausgeführt werden soll auch die MSVCRT.lib nicht hat? Oder hat die jeder Rechner?
Oder wird die mit dieser Option mit in die *.exe gepackt?

Ich vermute letzteres, die *.exe ist jetzt nämlich 49kb groß (vorher: 7kb).
 
Genau, es wird also nicht während der Laufzeit dynamisch gelinkt, sondern statisch und ist dann quasi "in der .exe".


Gruß,

badday
 
Du wirst bei Win32-Anwendungen IMMER Abhängigkeiten haben - ganz ohne Bibliotheken wird es also NICHT gehen.
 
Naja, solange es Bibliotheken sind, die standardmäßig bei Windows mit bei sind, ist das ja kein Problem ;)

Nur haben jetzt meine Freundin oder meine Eltern eher weniger Lust, sich die C-standardbibliotheken herunterzuladen und zu installieren, nur, um sich mal kurz anzugucken, was ich da zusammen gecoded hab :D
 
Zurück
Oben