2009-09-17 20 views
8

Tengo una aplicación de línea de comandos de Unix (con un gran archivo desagradable) que intento ejecutar en un mac. Lo estoy compilando en un sistema 10.6, con todas las bibliotecas apropiadas, por supuesto. El entorno de despliegue es un sistema 10.5, sin bibliotecas adicionales.Bibliotecas estáticas en el programa compilado de versión cruzada

He compilado sin -dynamic, y parece tener bibliotecas estáticas, correctamente. Cuando lo ejecuto en el sistema 10.6, funciona. Sin embargo, cuando lo ejecuto en el sistema 10.5, consigo:

dyld: comando de carga requerida desconocido 0x80000022

Tengo este mismo error cuando compilé cosas para el sistema 10.6 usando el Xcode 10.5, por lo que parece como un problema tipo desajuste versión. Sin embargo, he utilizado gcc-4.0 y

$ CFLAGS = -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-versión-min = 10,5

lo que debe ser configurado para 10.5 .. . ¿algunas ideas?

gracias

Edición de una antigua pregunta:

que tienen exactamente el mismo problema en un equipo diferente. Esta vez estoy en 10.5.8, totalmente actualizado, el mismo ejecutable funciona en 10.6 todavía.

¿Alguien ha tenido algo de suerte con esto en los meses desde que pregunté esto?

+0

Cuando google el problema me sale su pregunta. ¡Buena suerte! – Alan

+0

Heh, sí, tuve exactamente la misma experiencia en el sitio de Apple Dev ... Encontré una vieja pregunta por mi cuenta ... –

+0

Tengo el mismo problema. –

Respuesta

0

Dependiendo de la cantidad de bibliotecas que utilice, puede ser difícil obtener todas ellas vinculadas estáticamente. ¿Qué dice "otool -L your_binary"

Para obtener un paquete autónomo para una aplicación propia, realicé una instalación personalizada de MacPorts en un directorio no estándar, para poder establecer un enlace dinámico con las librerías de ese directorio y solo se verán obligadas a pedir a las personas que instalen todo en el mismo lugar en sus computadoras. No es genial, no es para nada el espíritu de Mac, pero es una aplicación Unix y debe familiarizarse con Unix para usar de todos modos.

Buena suerte

Pascal

+0

Bueno, al menos las librerías no estándar (excepto/usr/lib/X11/libexpat *, cualquiera que sea eso, que se privó de 10.5, pero todavía necesito por cualquier razón) se compilaron en ... y eso no fue el problema del "comando de carga desconocido" de todos modos ... –

+0

No lo había pensado bien, pero ahora que lo mencionas, las librerías * cargadas dinámicamente, que ni siquiera se muestran con otool -L, pueden haber sido las razón por la cual tuve mis propios problemas para vincular todo de forma estática. –

0

resulta que hay una dinámica l Función de carga ibrary (0x22) que se agregó en 10.5.6. El sistema en el que me estaba ejecutando era 10.5.5. Actualicé a 10.5.8, ¡y todo funciona!

+0

No, en una computadora diferente, 10.5.8 y NO se ejecuta ... dagnabit. –

0

Bien, la segunda solución, y no es muy satisfactoria, es encontrar una computadora 10.5.8, instalar los paquetes de desarrollador y volver a compilar ... lo mismo para powerPC ... triste, pero funcionará ...

2

He estado buscando el mismo problema, ya que desarrollo en 10.6 pero debe tener una versión que funcione en 10.5. Además de las opciones del compilador anteriores, se debe añadir:

-no_compact_linkedit

Se describe aquí:

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/ld.1.html

donde dice:

Normalmente cuando la orientación de Mac OS X 10.6, el enlazador generará información compacta en el segmento __LINKEDIT.Esta opción hace que el vinculador produzca información de reubicación tradicional.

Llegué de un debate en la lista de correo de xcode-users sobre "comando de carga requerido desconocido 0x80000022".

+1

Creo en OS X 10.7 un ejecutable simple que se bloquea en OS X 10.5.10, pero la opción del compilador sugerido * -no_compact_linkedit * produce el resultado exacto byte-wise como sin esta opción. :( – Mot

3

El motivo del error dyld 0×80000022 puede ser que, que está vinculando en OS X 10.6 y OS X 10.6 va a utilizar un comando de carga (LC_DYLD_INFO_ONLY = 0×80000022) que hace OS X 10.5 no entienden.

Para solucionar este problema, asegúrese de que está utilizando un destino de despliegue mediante el establecimiento de la variable de entorno justo antes de su comando de enlace:

export MACOSX_DEPLOYMENT_TARGET=10.5 

(o setenv MACOSX_DEPLOYMENT_TARGET=10.5)

siempre se puede comprobar si sus usos ejecutables el comando de carga correcta de esta manera:

otool -l executable 

éste mostrará LC_DYLD_INFO_ONLY (sin destino de distribución) por comas nds o LC_DYLD_INFO (con destino de despliegue).

Cuestiones relacionadas