2 votos

Ejecutar manualmente Rosetta 2 en un binario x86

Escribí un programa en C muy simple y mi objetivo es construir un binario sólo para x86 y luego ejecutar ese binario en un Apple Silicon Mac y hacer que Rosetta 2 lo traduzca a un binario Universal 2. Quiero mirar el binario traducido por Rosetta 2 específicamente; estoy no buscando construir una aplicación Universal 2 yo mismo (eso sería trivial).

He intentado ejecutar el programa a través de Terminal ( $ ./helloworld ) e incluso pegarlo dentro de un .app , colóquelo en la carpeta de Aplicaciones y haga doble clic en él. En ambos casos, el programa se ejecuta correctamente, pero según $ file helloworld El binario sigue siendo sólo x86 (Rosetta 2 no ha añadido un ejecutable arm64).

¿Alguna idea de cómo forzar a Rosetta 2 a traducir un binario?

1 votos

¿Busca que Rosetta cree un ejecutable arm64 a partir del binario x86? ¿Por qué no construir la aplicación como arm64 para empezar?

1 votos

@ErniePC12 Sí. Quiero desensamblar el binario arm64 traducido y compararlo con un binario construido de forma nativa.

0 votos

Para forzar que la aplicación se abra con Rosetta, marque la casilla en la ventana de información. Pero no estoy seguro de que esto modifique la aplicación con el binario traducido. Probablemente colocaría ese binario traducido en algún lugar en una caja de arena. ¿Tal vez comprobar /Library/Application Support/?

5voto

Sudhip Nashi Puntos 36

Esto es un poco tarde, pero puedes ejecutar directamente oahd-helper y pasarle dos descriptores de archivo (el binario x86 a traducir como el primero y un archivo al que dar salida al bin traducido como el segundo). La ubicación de oahd-helper varía (en Big Sur está en /Library/Apple/usr/libexec/oah, en Monterey es /usr/libexec/rosetta). Hice un gist que hace el proceso más sencillo, puedes encontrarlo aquí: https://gist.github.com/sunflsks/00fe7c740f3b1d9668f55dff80707d03

0voto

Matthew Barclay Puntos 111

Si ha escrito un programa en C, simplemente compile el programa dos veces, utilizando la versión de Mac de gcc y, a continuación, utilizar lipo para combinarlos en un solo programa.

Ver https://developer.apple.com/documentation/xcode/building_a_universal_macos_binary para ver la explicación de Apple sobre el proceso de creación de un binario universal (que contiene tanto x86_64 como ARM64)

0 votos

Gracias por la respuesta. Mi objetivo es desensamblar el binario traducido de Rosetta 2 y compararlo con un binario compilado nativamente (para tener una idea de cómo funciona Rosetta 2). He actualizado mi pregunta para que quede claro. También, para añadir a su respuesta, si el objetivo es hacer un binario Universal 2 (que no es en mi caso), sólo puede utilizar Xcode y establecer el dispositivo de construcción a "Cualquier Mac (Apple Silicon, Intel)".

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X