2010-04-11 14 views
11

Estoy usando Mac OS X 10.6 SDK y mi destino de implementación está configurado en Mac OS 10.5. Me estoy vinculando a libcrypto (AquaticPrime requiere esto) y descubrí que mi aplicación no se ejecuta en Leopard. El error es¿Vincular a libcrypto para Leopard?

dyld: Library not loaded: /usr/lib/libcrypto.0.9.8.dylib

He probado las siguientes soluciones, pero ninguno de ellos funciona:

  • enlaza directamente con libcrypto.0.9.7.dylib (el 10,6 SDK se niega a vincular directamente con libcrypto.0.9.7.dylib
  • copia. la versión de 10.5 SDK de libcrypto.0.9.7.dylib en el directorio 10.6 lib e intente enlazar con ella (esta vez el proceso de enlace tuvo éxito pero en Leopard la aplicación aún intenta buscar el archivo libcrypto.0.9.8.dylib inexistente y por lo tanto no se iniciará).
  • Copiando libcrypto.0.9.7.dylib desde una instalación de Mac OS X 10.5.8 y vincule con ella (el enlace se realizó correctamente pero la aplicación todavía busca libcrypto.0.9.8.dylib).

¿Hay alguna manera de enlazar a esta biblioteca y seguir usando el SDK 10.6?

Gracias.

+0

describir cómo se vinculando a la biblioteca. Estoy usando esto muy bien, al igual que otros, así que si algo está mal con su instalación o si está estableciendo vínculos incorrectos. –

Respuesta

1

Puede intentar configurar el SDK base en 10.5 en la configuración de compilación de destino.

+0

Sí ... este funcionó. Establecí el SDK base en 10.5 pero configuré el SDK activo en 10.6. De esta forma, tengo 10.6 códigos fuente (por ejemplo, aquellos que implementan 10.6 protocolos) y aún puedo ejecutar la aplicación en 10.5. Gracias. – adib

+0

Ahora que la opción "Active SDK" se eliminó en XCode 3.2.3, ¿qué debo hacer para este problema? – adib

+0

Ahora tiene opciones un poco limitadas. El problema se debe a que el SDK 10.6 tiene una versión de libcrypto que es incompatible con la que se incluye en 10.5. Al establecer el SDK base en 10.5, está diciendo que es la versión máxima de SDK que va a utilizar. Técnicamente, no deberías estar usando 10.6 encabezados. – JeremyP

0

¿Has probado la vinculación con libcrypto.0.9.dylib o libcrypto.dylib en lugar de las versiones específicas?

+0

Sí. - vincular a 'libcrypto.0.9.dylib' provoca errores del enlazador - vincular a los enlaces' libcrypto.dylib' y crea muy bien, pero la aplicación no se ejecuta en Leopard. – adib

22

Según este hilo aquí (primer puesto en el seguimiento: http://lists.apple.com/archives/cocoa-dev/2009/Aug/msg01737.html, "libcrypto en Snow Leopard" lista de rosca: http://lists.apple.com/archives/cocoa-dev/2009/Aug/thrd19.html), creo que la solución es hacer lo siguiente:

  1. Ir a/desarrollador /SDKs/MacOSX10.5.sdk/usr/lib/. Desde esta carpeta, copie "libcrypto.0.9.7.dylib" en la carpeta de origen del proyecto.

  2. Cambie el nombre del archivo que acaba de copiar a "libmycrypto.dylib".

  3. Agregue el archivo que acaba de renombrar a su proyecto. Asegúrese de eliminar cualquier otro framework libcrypto vinculado de su proyecto.

  4. Revise la configuración de compilación y asegúrese de que elimine el indicador del enlazador "-lcrypto". (Por lo general se pone en el ajuste "Otras banderas Linker".)

Ahora usted debería ser capaz de construir su proyecto y funcionará tanto en 10.5 y 10.6.

(libcrypto.0.9.7 está disponible tanto en 10.5 y 10.6. El archivo que ha copiado es sólo un esbozo de las cabeceras, pero sólo va a asociar en contra de ella, no incrustarlo en su proyecto. Desde la linker utiliza la ruta de instalación no el nombre de archivo real del dylib, nombrándolo "libmycrypto.dylib" elimina los conflictos de ruta, pero aún le permite vincular con la biblioteca que necesita.

FWIW, este es un problema de Xcode. ser capaz de enlazar contra /usr/lib/libcrypto.dylib - el enlace simbólico - y hacer que apunte a la versión correcta de libcrypto tanto en 10.5 como en 10.6. Sin embargo, Xcode siempre parece vincularse a la versión 0.9.8 cuando se basa en Snow Leopard por alguna razón.)

+0

Gran respuesta, justo lo que estaba buscando. Aclamaciones. –

+1

Si desea compilar su aplicación en 10.6+, pero ejecutarla en 10.5, esta es la respuesta que debe usar (no la que se marcó arriba). Además: cuando busque indicadores de encriptador de cifrado, recuerde que pueden ser tanto en la configuración del nivel del proyecto como en los objetivos individuales. Asegúrese de eliminar TODOS. – chockenberry

+0

Quizás esto funcione con ObjectiveC, pero no con C++/gcc. Solo el uso de 10.5 SDK a través de la opción -isysroot trabajó para enlazar con las versiones 0.9.7 de libssl/libcrypto; no solo necesita LINK contra esos dylibs, sino que COMPILE usando sus archivos H de 0.9.7. También cuando se construye en 10.7/10.8 usando 10.5 SDK, en profundidad en los encabezados STL de 10.5 SDK, hay enlaces simbólicos como i686-apple-darwin10 apuntando a i686-apple-darwin9. Necesita crear tales enlaces simbólicos para darwin11 y darwin12 (para i686 y x86_64). Para ser precisos, el directorio con esos enlaces simbólicos es /MacOSX10.5.sdk/usr/include/c++/4.2.1. –

1

Dependiendo de para qué uses lib, es posible que puedas reemplazar libcrypto con CommonCrypto que funciona bien con 10.5 y 10.6. He usado libcrypto solo para la función MD5, así que reemplacé openssl/md5.h con CommonCrypto/CommonDigest.hy MD5() con CC_MD5(), y libcrypto con CommonCrypto, y ahora funciona en ambos Leopards.

0

Leopard OS X se envía con un libcrypto y libssl que solo tiene la arquitectura ppc.

Una solución simple que no requiere cambiar el código de la aplicación es realizar una copia de seguridad de su libcrypto.0.9.dylib, libcrypto.0.9.8.dylib, libssl0.9.dylib, libssl.0.9.8.dylib y copie sobre libcrypto.0.9.7.dylib y libssl.0.9.7.dylib.

Puede utilizar Terminal.app para hacer estos cambios en la carpeta Aplicaciones:

cd /usr/lib 
    sudo cp libcrypto.0.9.dylib libcrypto.0.9.dylib.old 
    sudo cp libssl.0.9.dylib libssl.0.9.dylib.old 
    sudo ln -sf libcrypto.0.9.7.dylib libcrypto.0.9.dylib 
    sudo ln -sf libssl.0.9.7.dylib libssl.0.9.dylib 

Aquí hay una solución alternativa que le permite mantenerse en la versión de OpenSSL más actualizado:

1. reactivate the current openssl: port activate [email protected]_0 (or whatever) 
    2. clean up your old unwanted versions of everything: port uninstall inactive 
    3. uninstall badly behaved ports: port uninstall md5sha1sum subversion neon 
    4. get them back: port install subversion md5sha1sum 
Cuestiones relacionadas