Ich habe ein sehr einfaches C-Programm geschrieben und mein Ziel ist es, eine reine x86-Binärdatei zu erstellen und diese Binärdatei dann auf einem Apple Silicon Mac auszuführen und sie von Rosetta 2 in eine Universal 2-Binärdatei übersetzen zu lassen. Ich möchte mir speziell die Rosetta 2-übersetzte Binärdatei ansehen; Ich möchte selbst keine Universal 2-App erstellen (das wäre trivial).
Ich habe versucht, das Programm über Terminal ( ) auszuführen $ ./helloworld
und es sogar in eine zu stecken .app
, es in den Anwendungsordner zu legen und darauf zu doppelklicken. In beiden Fällen läuft das Programm korrekt, aber laut $ file helloworld
ist die Binärdatei immer noch nur x86 (Rosetta 2 hat keine ausführbare arm64-Datei hinzugefügt).
Irgendeine Idee, wie man Rosetta 2 zwingen kann, eine Binärdatei zu übersetzen?
Dies ist ein bisschen spät, aber Sie können direkt oahd-helper
zwei Dateideskriptoren ausführen und übergeben (die x86-Binärdatei, die als erster übersetzt werden soll, und eine Datei, in die der übersetzte Bin als zweiter ausgegeben wird). Der Speicherort von oahd-helper
variiert (auf Big Sur ist es in /Library/Apple/usr/libexec/oah, auf Monterey ist es /usr/libexec/rosetta). Ich habe eine Zusammenfassung erstellt, die den Vorgang vereinfacht. Sie finden sie hier: https://gist.github.com/sunflsks/00fe7c740f3b1d9668f55dff80707d03
Wenn Sie ein Programm in C geschrieben haben, kompilieren Sie das Programm einfach zweimal mit der Mac-Version von gcc
und verwenden Sie dann lipo
, um sie zu einem Programm zu kombinieren.
Siehe https://developer.apple.com/documentation/xcode/building_a_universal_macos_binary für Apples Erläuterung des Prozesses zum Erstellen einer universellen Binärdatei (enthält sowohl x86_64 als auch ARM64)
ErniePC12
nrubin29
ErniePC12
Wowfunhappy
gnasher729
Wowfunhappy
nrubin29