C++ Redistributable für Visual Studio Anwendungen?



  • Hey,
    ich wollte euch mal was fragen:
    Man sagt doch immer, dass C/C++ eine Plattforumübergreifende Programmiersprache ist. Warum braucht man denn dann z.B. "Visual C++ Redistributable for Visual Studio 2012 " für Projekte, die man mit Visual Studio geschrieben hat?
    Das kann man dann zum Beispiel auf Linux nicht laufen, oder braucht man das nur für Windowsanwendungen(also mit Windows.h)?
    Danke schonmal!


  • Mod

    Die Idee ist, dass du dein standardkonformes Programm auch für das Zielsystem übersetzen kannst. Nicht, dass die Executable selbst portabel wäre.



  • Außerdem braucht dein Programm die Redist nicht, u.a. wenn du die CRT statisch oder sie erst gar nicht linkst.

    http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx
    http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx
    http://msdn.microsoft.com/en-us/library/3tz4da4a.aspx



  • Mit Plattform ist hauptsächlich der Prozessor gemeint. Plattformen wären x86-, amd64- oder Atmel Atmega -kompatibel. Für jede Architektur muss der Code neu übersetzt werden und läuft dann dort auch, wenn man keine Plattformabhängigkeit eingebaut hat.

    Aber wenn du Windows und Linux auf einem Rechner zu laufen hast ist die Plattform ja gleich. Das erste Problem Windows-exen auf Linux laufen zu lassen ist, dass die exe eine Datei ist, wo drin steht, wie man einen Prozess baut (welche Daten an welche Stellen des Speichers kopiert werden etc). Dieses Dateiformat versteht Linux erstmal nicht und es müssen noch Libraries vom System drangelinkt werden damit ein fertiger Prozess raus kommt. Wenn die Libraries nicht da sind können sie nicht drangelinkt werden und der Prozess ist unvollständig und kann nicht gestartet werden. Das kann man Linux per Launcher und Windowslibs beibringen. Das nächste Problem ist, dass der Prozess mit dem Betriebssystem sprechen muss, um zum Beispiel Dateien auf zu machen oder Speicher zu bekommen. Das wird per Interrupt gemacht. Interrupts haben Nummern, Windows und Linux benutzen verschiedene Nummern und verschiedene Formate (falsches Beispiel: fopen("Datei", "w") wäre Interrupt 0x21 mit dem Pointer auf "Datei" in Register eax und Pointer auf "w" in Register ebx, Linux wäre Interrupt 0x80 mit Pointer auf "Datei" im Stackpointer und einer Zahl in eax für "w", "r", "wrb", ...). Betriebssysteme legen das fest wie sie gerade lustig sind. Damit es weiter funktioniert wenn die Syscalls geändert wurden gibt es (bei Windows) Subsysteme, die das Interface der exe in das Interface des Systems übersetzt. Soweit ich weiß wurde bei Linux noch nie ein stable Syscall entfernt, sodass alle Binaries unter einem System laufen. Unter Linux kann man Wine benutzen um die Windows-Syscalls in Linux-Syscalls zu übersetzen. Windows könnte ein Linux-Subsystem bauen, technisch unproblematisch aber politisch nicht gewollt.

    Heißt also das Windows-Programm läuft schon unter verschiedenen Windowsversionen oder unter Linux, hat aber Probleme mit dem Betriebssystem zu reden. Daran ist aber nicht C/C++ schuld, sondern dass man sich nie auf ein gemeinsames Format geeinigt hat.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x und C++11) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten