Xcode no se vincula correctamente con el SDK antiguo

Tengo un problema con la aplicación C heredada de 32 bits, integrada en Mac OS 10.4, con Xcode 2.2.0. Se ejecuta correctamente en sistemas posteriores (64 bits) (10.5 y posteriores), pero si trato de compilarlo en versiones posteriores de Xcode (2.2.1 - 3.2.6) en 10.5 y posteriores, su comportamiento cambia, aunque configuré SDK 10.4 y GCC 4.0 en todas partes (en "configuración del proyecto" y "configuración de destino activo").

Detalles sobre el comportamiento cambiado: al obtener direcciones de funciones a través CFBundleGetFunctionPointerForName() y luego llamarlos, algunos punteros de retorno. Luego:

  • Si la aplicación está compilada en Xcode 2.2.0 en Mac OS 10.4 y se ejecuta en 10.5+, los punteros no podrían exceder LONG_MAX, por lo que con una firma larga es suficiente para almacenar el resultado de la llamada.

  • Si la aplicación se compila en Xcode 2.2.1+ en 10.5+ y se ejecuta en 10.5+, los punteros podrían estar dentro del rango LONG_MAX..ULONG_MAX.

E interpretar el resultado como con signo largo es esencial, porque las funciones que devuelven con signo largo (no punteros) se llaman exactamente de la misma manera. Cambiarlo sería un error, así que no sugiera dividir las llamadas a funciones que devuelven punteros y funciones que devuelven resultados de inmediato; solo se haría si no puedo obtener una compilación correcta.

Esta diferencia en el comportamiento de las compilaciones solo podría explicarla como llamar en tiempo de ejecución a otros paquetes de los que llamaría una compilación anterior, y eso es posible si 1) la biblioteca CFBundle, que llama a funciones, no es la misma que en 10.4 real, o 2) El sistema determina correctamente el SDK de una compilación anterior y utiliza la "compatibilidad con versiones anteriores" correcta, pero algo en la configuración del programa más reciente es incorrecto, por lo que se llama a otro paquete en tiempo de ejecución.

Así que me pregunto, ¿hay alguna opción "oculta" en Xcode o sus backends, que marque la diferencia entre la compilación real de 10.4 y la compilación de 10.4 SDK en sistemas operativos posteriores? ¿O cómo puedo buscar esas diferencias?

preguntado el 08 de noviembre de 11 a las 13:11

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.