es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Apunta correctamente a MacOS 10.6 utilizando las herramientas de construcción de MacOS 10.13

Por pura curiosidad académica, estoy tratando de hacer que una aplicación GUI de MacOS sea ultra compatible, lo que significa que debe ejecutarse en todas las versiones de MacOS desde 10.6 hasta 10.14; ir más allá de este rango está restringido por las diferencias en la API de Cocoa y CoreText/CoreGraphics. Desafortunadamente, la aplicación depende significativamente de varias características de C11, como __auto_type, por lo que no puedo simplemente compilarla en 10.6, teniendo que recurrir a la compilación cruzada.

El problema es que después de vincularlo en 10.13, el binario Mach-O x86-32 resultante contiene 3 comandos de carga en su encabezado que el dyld de 10.6 no puede reconocer:
1. LCMAIN (0x80000028)
1. LC
DATAINCODE (0x00000029)
1. LCSOURCEVERSION (0x0000002A)

Mi pregunta es:
¿Cómo le digo al enlazador llvm-gcc que evite insertar estos comandos y, por ejemplo, substituir LCMAIN con el más compatible LCUNIXTHREAD, etc.?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para indicar al enlazador llvm-gcc que evite insertar los comandos de carga que no son compatibles con versiones antiguas de MacOS, puedes utilizar la opción -Wl seguida de los comandos de sustitución de comandos de carga. Por ejemplo, para reemplazar LC_MAIN con LC_UNIXTHREAD, utiliza el siguiente comando:

    -Wl,-e,_main -Wl,-no_data_in_code -Wl,-no_source_version
    

    Este comando indica al enlazador que sustituya LC_MAIN con -e,_main, que especifica el punto de entrada de tu programa, y que elimine los comandos de carga LC_DATA_IN_CODE y LC_SOURCE_VERSION. Al utilizar este comando, puedes crear un archivo binario compatible con versiones antiguas de MacOS, a la vez que utilizas las características C11 en las que tu aplicación depende.

Comments are closed.