Wie kompiliere ich für OS X unter Linux oder Windows?

74

Ich möchte meine C / C ++ - Apps auf OS X portieren.

Ich habe keinen Mac, aber Linux und Windows. Gibt es dafür ein Werkzeug?

Unbekannt
quelle

Antworten:

23

Es scheint einige Skripte zu geben , die Ihnen beim Einrichten der Cross-Kompilierung für den Mac helfen sollen. Ich kann nicht sagen, wie gut sie sind oder wie gut sie auf Ihr Projekt zutreffen. In der Dokumentation beziehen sie sich auf diese Anweisungen zum Cross-Compilieren für 10.4 und auf diese zum Cross-Compilieren für 10.5. Diese Anweisungen können hilfreicher sein als das Skript, je nachdem, wie gut das Skript Ihren Anforderungen entspricht.

Wenn es sich bei Ihrem Programm um freie oder Open Source-Software handelt, möchten Sie möglicherweise stattdessen eine MacPorts- Portdatei erstellen (Dokumentation hier ) und Ihren Benutzern ermöglichen, Ihr Programm mit MacPorts zu erstellen. Dies ist im Allgemeinen die bevorzugte Methode, um tragbare kostenlose oder Open-Source-Software unter Mac OS X zu installieren. MacPorts wurde in der Vergangenheit unter Linux ausgeführt, sodass es möglicherweise möglich ist, Ihre Portdatei unter Linux zu entwickeln und zu testen (obwohl dies offensichtlich erforderlich ist) auf einem Mac getestet werden).

Brian Campbell
quelle
11
Oder heutzutage Homebrew statt Macports.
Prof. Falken
@jcoffland Nein, umgekehrt. Es dient zum Erstellen von OS X-Anwendungen unter Linux. Lesen Sie den Titel. "Cross-Compiling unter Linux für Mac OS X 10.3 - 10.5" (Hervorhebung hinzugefügt). Beachten Sie, dass diese Antwort inzwischen sehr alt ist (fast 7 Jahre alt, yikes!) Und die späteren Antworten unten aktuellere Informationen enthalten.
Brian Campbell
49

Für Linux gibt es einen vorgefertigten GCC-Cross-Compiler (aus öffentlich verfügbaren modifizierten GCC-Quellen von Apple).

https://launchpad.net/~flosoft/+archive/cross-apple

Update für 2015

  1. Nach so vielen Jahren unterstützt die branchenübliche IDE nun OSX / iOS / Android.

http://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/311

  1. RadStudio von Embarcadero unterstützt auch das Erstellen von OSX / iOS / Android-Apps unter Windows.

  2. Diese Antwort von Thomas bietet auch ein Cross-Compilation-Tool.

Für all diese Optionen benötigen Sie noch ein echtes Mac / i-Gerät, um die Anwendung zu testen.

Viktor Latypov
quelle
Wie gut funktioniert es? Würde es zum Beispiel das Kompilieren von Qt für MacOSX ermöglichen?
RushPL
4
Es ist ein perfekt gültiges GCC 4.2, das große Bibliotheken kompilieren kann. Es wurde jedoch nicht für 10.7-, 10.8- oder 10.9-SDKs aktualisiert, sodass es derzeit als veraltet angesehen werden kann. Ich habe es verwendet, um mein eigenes Projekt in C / C ++ zu kompilieren, nur um zu testen, ob es portiert werden kann und um einige offensichtliche Inkompatibilitäten zu beheben. Dann habe ich es auf dem echten Mac erstellt.
Viktor Latypov
Wie kann ich das auf Fedora installieren?
Panzi
@panzi: Ich habe es nur für CrunchBang (eine Variante von Debian) verwendet. Vielleicht sollten Sie die .deb-Archive entpacken und versuchen, die Pfade zu konfigurieren. Oder versuchen Sie wie gewohnt, die Quellen zu kompilieren. Vielleicht bietet diese Antwort jetzt eine bessere Alternative: stackoverflow.com/a/19891283/1182653
Viktor Latypov
Obwohl Microsoft Visual Studio Connect angekündigt hat, das andere Compiler unterstützt, einschließlich Clang, kann ich leider keine Informationen darüber finden, wie MacOS tatsächlich als Ziel ausgewählt werden kann.
AnotherParker
30

Ich habe ein Projekt namens OSXCross erstellt, das auf OS X (10.4-10.9) unter Linux abzielt.

Derzeit werden clang3.2 bis 3.8 (Trunk) unterstützt (Sie können Ihre Dists verwenden clang).
Darüber hinaus können Sie auch eine aktuelle Vanille bauen GCC(4.6+).

LTO funktioniert auch für beide clangund GCC.

Derzeit wird cctools-870 mit ld64-242 verwendet.

https://github.com/tpoechtrager/osxcross

Thomas
quelle
Ich habe Ihr Projekt verwendet und es hält, was es verspricht. Getestet mit dem neuesten XCode (7.1) und dem neuesten OSX (10.11.1).
Panayotis
6
  1. Holen Sie sich " VMware Player "
  2. Holen Sie sich " Mac OS X VM Image "
  3. Kompilieren / Debuggen / Integrieren und Testen Sie Ihren Code auf dem neuen Betriebssystem, um sicherzustellen, dass alles funktioniert

Wenn Sie versuchen, etwas auf mehreren Plattformen zum Laufen zu bringen, müssen Sie unbedingt auf der vorgesehenen Plattform kompilieren / ausführen / integrieren / testen. Sie können nicht einfach auf einer Plattform kompilieren / ausführen und dann sagen "Oh, es sollte auf der anderen Plattform genauso funktionieren".

Selbst mit einer wirklich guten plattformübergreifenden Sprache wie Java werden Sie auf Probleme stoßen, bei denen es auf der anderen Plattform nicht genau gleich funktioniert.

Der einzige Weg, den ich gefunden habe, der meine Zeit / Produktivität / Fähigkeit zur schnellen Iteration auf mehreren Plattformen berücksichtigt, ist die Verwendung einer VM der anderen Plattformen.

Es gibt andere Lösungen wie Dual-Boot und solche, die ich nicht erwähnt habe, aber ich finde, dass sie meine Produktivität / Zeit nicht respektieren.

Nehmen Sie als Beispiel das Dual-Booten:

  1. Ich ändere OS 1
  2. Starten Sie OS 2 neu
  3. Vergiss etwas unter OS 1
  4. Starten Sie OS 1 neu
  5. Nehmen Sie eine Änderung unter OS 1 vor
  6. Neustart in OS 2 ... WIEDER ...

BAM dort geht 30 Minuten meiner Zeit und ich habe nichts Produktives getan .

Trevor Boyd Smith
quelle
4
Wenn 3 Starts 30 Minuten dauern, benötigen Sie neue Hardware. und wahrscheinlich die Möglichkeit, von einem anderen auf das Dateisystem eines Betriebssystems zuzugreifen und es zu bearbeiten. Aber ich verstehe das Gefühl und bevorzuge auch VMs, weil ich sie meistens als dedizierte physische Maschinen behandeln kann.
11
Die zum Neustart benötigte Zeit ist nicht nur die Startzeit, sondern auch die Abschaltzeit, das Neustarten von Daemons, das Einrichten Ihrer Entwicklungsumgebung, das Überprüfen, ob Sie immer noch die neueste Prüfung von Ihrem Versionskontrollsystem usw. haben.
Arafangion
12
Ganz zu schweigen davon, dass mein Gehirn jegliche Cache-Kohärenz verliert und alles, was ich tun muss, langsam neu zwischenspeichern muss ... und höchstwahrscheinlich an Produktivität verliert, wenn der Webbrowser versehentlich geöffnet wird.
Trevor Boyd Smith
3
@ MartinKällman ist gegen die Apple Lizenzvereinbarung. Die Rechtmäßigkeit hängt davon ab, in welchem ​​Land Sie sich befinden.
Rubenvb
6
Es kann technisch gegen eine zufällige Lizenzvereinbarung sein, aber Sie können jederzeit einfach einen Mac Pro kaufen und alle drei Betriebssysteme mit VMs ausführen. Warum sollten Sie nicht in der Lage sein, eine schöne Windows-Box zu kaufen und dasselbe zu tun? Alles andere zuzulassen ist wettbewerbswidrige Praxis und in meinen Büchern geradezu illegal (oder sollte es auch sein).
smaudet
4

Sie würden eine Toolchain benötigen, um die Kompilierung für mach-o zu überqueren, aber selbst wenn Sie diese hätten, hätten Sie nicht die Apple-Bibliotheken, mit denen Sie entwickeln könnten. Ich bin mir leider nicht sicher, wie Sie ohne sie portieren könnten.

Joel Levin
quelle
3
Wenn Sie die Cross-Toolchain haben, können Sie einfach die Bibliotheken von OS X
Kopieren ist der richtige Weg, obwohl Sie auch die Header / staticlibs benötigen.
Kotauskas
4

Die Entwicklung von Apple ist ein seltsames Tier für sich. OS X verwendet einen GCC-Port mit einigen Änderungen, um ihn "appley" zu machen. Theoretisch ist es möglich, die Quellen für das Apple GCC und die Toolchain sowie die Apple-Kernel- und Bibliotheksheader zu verwenden und einen Cross-Compiler auf Ihrem Windows-Computer zu erstellen.

Warum du diesen Weg gehen willst, ist mir ein Rätsel. Sie können einen billigen Mac mini ab 600 US-Dollar haben. Die Zeit, die Sie investieren, um einen Cross-Compiler zum Laufen zu bringen (insbesondere mit einem Windows-Host für Unix-Tools), wird wahrscheinlich sowieso mehr als 600 US-Dollar kosten.

Wenn Sie wirklich daran interessiert sind, Ihre App plattformübergreifend zu gestalten, schauen Sie sich Qt, wxWidgets oder FLTK an. Alle bieten plattformübergreifende Unterstützung mit minimalen Änderungen am Basiscode. Zumindest müssen Sie auf diese Weise nur einen Mac finden, auf dem Sie Ihre App kompilieren können. Dies ist nicht allzu schwierig, wenn Sie technisch versierte Freunde haben, denen es nichts ausmacht, Ihnen SSH-Zugriff auf ihren Mac zu gewähren.

Adam Hawes
quelle
10
Ich habe Zugriff auf viele Windows-Computer. Ich ziehe es jedoch vor, die Windows-Binärdatei gleichzeitig mit der Erstellung für Linux zu generieren. Natürlich muss das Programm dann unter Windows getestet werden, aber es ist sehr praktisch zu sehen, dass das Programm mindestens für alle Zielplattformen in einem Schritt erstellt wird.
Prof. Falken
2
Ganz zu schweigen davon, dass Sie möglicherweise keinen Mac haben, aber daran interessiert sind, dass andere (die Ihre Anwendung auf einem Mac verwenden möchten) die Anwendung testen können, ohne sie selbst kompilieren zu müssen.
smaudet
3
Ich fand es erwähnenswert, dass Apple GCC in XCode nicht mehr verwendet, sondern jetzt Clang / LLVM .
Travis Pessetto
4

Sie werden auf jeden Fall irgendwie OS X brauchen. Auch wenn Sie keinen Mac besitzen, können Sie einige Alternativen ausprobieren .

Pablo Santa Cruz
quelle
3

Ich habe diese kleine Dokumentation im Internet gefunden: http://devs.openttd.org/~truebrain/compile-farm/apple-darwin9.txt

Dies beschreibt genau, was Sie wollen. Ich interessiere mich selbst dafür, habe es aber noch nicht getestet (vor 10 Minuten gefunden). Die Dokumentation scheint jedoch gut zu sein.


quelle
2

Sie können einen Mac in der Cloud mieten von dieser Website. Sie können sie ab 1 US-Dollar mieten, was ausreichen sollte (es sei denn, Sie benötigen Root-Zugriff, dann sehen Sie sich 49 US-Dollar + an).

64_
quelle
2
Dies setzt jedoch voraus, dass man seine Quellen auf einen Computer "in der Cloud" kopieren möchte. Eine ziemliche Annahme für Nicht-FLOSS.
0xC0000022L
Nicht sehr langfristig. Nach 30-maligem Gebrauch wäre es billiger, einen Mac zu kaufen.
Simon
-1

Es gibt einige Cross-Compiler-Setups, aber fast alle sind für das verteilte Kompilieren im distcc-Stil gedacht. Meines Wissens gibt es keine Möglichkeit, direkt auf die Mac-Plattform zuzugreifen, ohne tatsächlich einen Mac zu haben. Der nächste, den Sie erreichen können, ohne auf QT oder wxWidgets zurückzugreifen, ist OpenStep mit GNUStep oder ähnlichem, aber das ist keine echte Cocoa-Plattform, nur sehr nahe.

grau verblassen
quelle
1
Sogar Qt benötigt eine kompilierungsübergreifende Toolchain, um OSX-Binärdateien auf Nicht-OSX-Plattformen zu erstellen.
Lennart Rolland
-4

Die kurze Antwort ist irgendwie. Sie müssen eine plattformübergreifende Bibliothek wie QT verwenden . Es gibt IDEs wie QT Creator, mit denen Sie auf einem Betriebssystem entwickeln und Makefiles für andere generieren können. Weitere Informationen zur plattformübergreifenden Entwicklung finden Sie in den plattformübergreifenden Episoden dieses Podcasts (beachten Sie, dass die Serie noch nicht beendet ist und wöchentlich neue Episoden erscheinen).

Wie andere Antworten erklären, können Sie wahrscheinlich für einen Mac unter Windows oder Linux kompilieren, aber Sie können Ihre Anwendungen nicht testen. Daher sollten Sie wahrscheinlich die 600 US-Dollar für einen Mac ausgeben, wenn Sie professionell programmieren oder arbeiten Finden Sie in Open-Source-Software einen Entwickler mit einem Mac, der Ihnen hilft.

Jared
quelle