Ich überlege zwei Optionen für ein Programm. Entweder C++ mit Boost Asynchronous IO oder Java mit dem asynchronen NIO. Ich weiß, dass Java portabel ist, solange das System die Java-Laufzeit hat. Ich würde lieber C++ mit Boost verwenden, aber ich bin mir nicht sicher, ob das Programm, das ich schreibe, auf einen anderen Windows-Rechner portiert werden kann und trotzdem läuft. Was muss ich tun, damit das Programm zur Laufzeit alle notwendigen Abhängigkeiten hat? Ich plane nur den windows.h, C++ 2003 Standard und die Boost Bibliotheken zu verwenden.Ist ein Boost-Windows-Programm auf andere Windows-Systeme portierbar?
Antwort
Solange Sie Boost, die C++ - Standardbibliothek (und die CRT, wenn Sie das Gefühl haben müssen) verwenden, wird Ihr Code ziemlich einfach portieren.
Stellen Sie sicher, dass Sie keine Microsoft CRT-Erweiterungen wie die str*_s
Funktionen (z. B. here) vermeiden - MSDN markiert diese nicht sehr gut als nicht standardgemäß, leider.
Vermeiden Sie auch die Verwendung von C++ 0x-Features in Visual C++ v10, um die Portabilität kurzfristig zu maximieren - oder prüfen Sie, ob die anderen Compiler, auf die Sie ausgerichtet sind, über die Funktionen verfügen, die Sie verwenden möchten.
Seien Sie vorsichtig: Wenn Sie eine Menge Dinge aus windows.h
verwenden, werden Sie die Portabilität brechen und die Arbeit erhöhen, die Sie tun müssen. Vermeiden Sie dies so weit wie möglich, wenn Sie erwarten, später zu portieren, und wenn Sie etwas von dort benötigen, versuchen Sie, die Verwendung in verschiedenen "Ich muss dies ändern, wenn ich Port" Header und Code-Dateien von Ihnen zu isolieren, so Sie Sie wissen, dass Sie nur die Teilmenge Ihres Codes betrachten müssen, wenn Sie ein anderes Betriebssystem portieren.
Boost und CRT können statisch mit Ihrer ausführbaren Datei verknüpft werden, so dass es überhaupt keine externen Abhängigkeiten gibt.
Oh, also Boost-Bibliotheken sind portabel, dann sollte es funktionieren, um eine ausführbare Datei auf XCode in Mac OS X statisch zu verknüpfen und zu erstellen, sollte unter Windows (solange nicht-portable Bibliotheken vor der Verknüpfung behandelt werden) ... richtig ausgeführt werden ? – Aaron
In Ihrer Frage sprechen Sie über verschiedene Windows-Plattformen, aber jetzt kommentieren Sie zum Erstellen einer ausführbaren Datei in Mac OS, die auf einer Windows-Plattform ausgeführt wird? Meinst du ursprünglich verschiedene Betriebssysteme? Das würde die Antwort etwas ändern, obwohl beide mit einiger Vorsicht eine weitgehend ähnliche Code-Basis verwenden könnten. – Bart
@BKevelham: Ja, Sie haben recht, das ist eine ganz andere Frage. Für jetzt mache ich mir keine Sorgen. Ich werde nur die Windows-VM starten und Visual C++ verwenden. – Aaron
- 1. Ein Attribut wird aktualisiert, andere ist nicht
- 2. Warum und wie sind C++ - Bitfelder nicht portierbar?
- 3. Auf der Suche nach zuverlässigen Python-Prozess-Synchronisationstechniken (Linux nicht portierbar)
- 4. Mein SSIS-Paket portierbar machen - wie geht das?
- 5. Wie ein div verstecken, wenn der andere ein aktiv ist
- 6. Drucken Sie ein Mitglied der Struktur, die ein Zeiger auf eine andere Struktur ist?
- 7. Nebenwirkungen auf andere Ressourcen
- 8. auf eine andere Seite
- 9. Warum ist ein Ausdruck konstant, aber nicht der andere?
- 10. jQuery Wenn ein Element sichtbar ist, schließen Sie das andere
- 11. Ist es gut, andere Produkte auf einer einzigen Produktseite hinzuzufügen?
- 12. Ist es möglich, Lokalisierung auf eine andere Sprache zu erzwingen?
- 13. eine Mysqldump komprimieren, die auf eine andere Maschine SSH'd ist
- 14. Andere Bildschirmgröße auf Android
- 15. Kann ein CSS-Selektor auf eine andere selectors-Eigenschaft verweisen?
- 16. Wie deaktiviert man andere Kontrollkästchen beim Klicken auf ein Kontrollkästchen?
- 17. Kann ein std :: function member auf andere Mitglieder zugreifen?
- 18. Rails: Wie man ein Formular auf eine andere Controller Aktion
- 19. Diagonal ein Video auf einer Seite sichtbar und andere unsichtbar
- 20. Anwendung eine andere CSS-Klasse auf ein Element
- 21. Wie ein schwebendes Blick auf eine andere Ansicht in android
- 22. Ein Thread lesen, andere Thread schreiben auf gemeinsame Variable
- 23. Zeiger auf eine andere Instanz.
- 24. Login-Seite auf andere Domäne
- 25. Zurück andere Objekte auf init
- 26. Wenn bool ein Makro für int ist, warum ist es eine andere Größe?
- 27. RequiredFieldValidator, ... Auswirkungen auf andere Kontrollen
- 28. Schließzelle basierend auf Wert auf andere Zelle
- 29. TextArea- Auswirkungen auf andere tds
- 30. Ein entityManger findet Entität, die andere nicht
Ich denke, er fragt nach dem Ausführen seiner Anwendung auf einem anderen/Windows/Maschine neben seiner Entwicklungsmaschine. –
@Zach - siehe Kommentare zu der anderen Antwort, es ist nicht 100% klar, ob andere Betriebssysteme später ins Visier genommen werden, aber ich wollte das Problem jetzt nur noch ansprechen –