Wie kann ich Befehlszeilensoftware mit Rosetta 1 ausführen?

Auf Wunsch einiger PPC-Benutzer versuche ich, ein PPC-kompatibles Installationspaket für Open-Source-Software zu erstellen. Dazu muss natürlich eine PPC-Binärdatei kompiliert werden. Ich habe eine virtuelle Leopard-Maschine auf meinem Intel-Mac eingerichtet, aber ich habe keinen Zugriff auf tatsächliche PPC-Hardware.

MacPorts bietet keine C++11-Compiler an, die PPC-Binärdateien auf Intel crosskompilieren können, aber ich dachte, ich könnte dies umgehen, indem ich MacPorts vollständig unter Rosetta ausführe. Mit Rosetta 2 wäre das einfach – ich würde einfach die Terminal-App auf „Öffnen mit Rosetta“ setzen, und alles, was das Terminal ausführt, würde auch Rosetta verwenden. Dies war eine häufig empfohlene Methode zum Ausführen von Homebrew auf M1-Macs, bevor Homebrew vor einigen Wochen endlich native Apple Silicon-Unterstützung hinzufügte.

Leider scheint Rosetta 1 nicht so intelligent zu sein. Ich kann die Terminal-App auf „Öffnen mit Rosetta“ einstellen, aber dies führt dazu, dass nur die wörtliche Terminal-App Rosetta verwendet. Bash, MacPorts usw. laufen laut Activity Monitor immer noch als Intel-Prozesse.

Gibt es eine alternative Möglichkeit, Befehlszeilenprogramme – und vorzugsweise alle MacPorts – unter Rosetta auszuführen?

Ich bin nur erstaunt, dass es so viele PPC-Benutzer gibt, die irgendetwas anfordern, geschweige denn dasselbe. ;-)
Welche Open-Source-Software? Macports hat wahrscheinlich einen Port dafür. Wenn Sie macports so einrichten, dass es universell erstellt, wird jede ausführbare Datei mit mehreren Architekturen erstellt - für ältere OSX-Versionen sind dies i386 und ppc. Thjs verwendet Rosetta überhaupt nicht, nur Apples Tools, die mehrere Architekturen erstellen können
@mmmmmm Squid4, für dessen Erstellung C++11 erforderlich ist. MacPorts kann keine universelle C++11-Software für PPC und x86 erstellen. trac.macports.org/ticket/62332#comment:2
@benwiggy In diesem Fall besteht der Sinn des Pakets darin, https-Probleme auf älteren Betriebssystemen zu beheben, also macht es irgendwie Sinn. forums.macrumors.com/threads/… Ich habe ungefähr zehn E-Mails bekommen, nicht Hunderte. :)
Macports squid4-Port scheint ports.macports.org/port/squid4/builds auf 10.5 ppc zu bauen
@mmmmmm Es baut, nur nicht universell. (Wenn Ihre Universalbögen auf i386 und PPC eingestellt sind.)

Antworten (2)

Vorausgesetzt, Sie befinden sich auf einem System, auf dem Rosetta v1 verfügbar ist (bis einschließlich Mac OS X 10.6), können Sie das System mit dem Befehl anweisen, das ppc-Segment einer universellen Binärdatei auszuführen arch.

/usr/bin/arch -arch ppc /path/to/some/executable

Ich fand es nützlich, eine virtuelle Maschine in Parallels Desktop zu behalten, auf der OS X Server 10.6 mit Xcode und anderen installierten Entwicklertools für dieses Szenario ausgeführt wird, um ältere Software für veraltete PowerPC-Mac-Systeme zu kompilieren.

Auf Leopard und Snow Leopard können und sollten Sie den archBefehl verwenden . Leider existiert dieser Befehl nicht auf Tiger. (Nun, das archProgramm existiert, aber es kann nur Ihre aktuelle CPU-Architektur drucken.)

Stattdessen können Sie auf Tiger die translateBinärdatei direkt verwenden:

/usr/libexec/oah/translate /path/to/some/executable

Beachten Sie, dass Sie den vollständigen Pfad zur ausführbaren Datei angeben müssen. Wenn die ausführbare Datei nicht existiert (oder Sie den vorherigen Satz ignoriert haben), schlägt translate mit einem sehr wenig hilfreichen fehl segmentation fault.