Android no puede cargar el error de enlace insatisfecho de libcrypto local

Necesito ejecutar una versión más nueva de openssl en mi aplicación que la que viene en el sistema operativo. Pude parchear y la fuente de Android para compilar una versión más nueva y luego extraer la biblioteca compartida para usarla en mi aplicación.

Luego pude compilar y vincular mi código nativo que requiere una función solo en las versiones más nuevas de openssl contra mi nueva biblioteca compartida (el parche para un openssl más nuevo funcionó).

También pude crear algunas funciones jni que funcionan como se esperaba, pero tan pronto como agregué la función que solo está en la biblioteca compartida más nueva de openssl local para la aplicación, aparece un error de enlace insatisfecho.

Mi suposición es que la versión del sistema de libcrypto y libssl está anulando mis versiones locales en /libs/armeabi/libcrypto.so y /libs/armeabi/libssl.so ... ¿cómo soluciono esto?

preguntado el 12 de junio de 12 a las 20:06

2 Respuestas

El sistema ya viene con una biblioteca conocida como libcrypto, y eso se seleccionará antes que su biblioteca. La solución más fácil es darle a su biblioteca un nombre diferente y usarlo en su System.loadLibrary(...) llamada.

Noticias

Como señaló, deberá reconstruir la biblioteca con el nuevo nombre, en lugar de simplemente cambiar el nombre del archivo.

Respondido el 13 de junio de 12 a las 06:06

Intenté cambiar el nombre de archivo de libcrypto.so a otra cosa, pero no funcionó. ¿No importa el nombre del archivo y tengo que cambiarlo en la compilación de openssl? - T.Leavy

Es cierto que deberá reconstruir la biblioteca con este nuevo nombre. Actualicé la respuesta según tu propuesta. - Ángelo van der Sijpt

Sí, JNI está recogiendo las versiones del sistema. No usó sus versiones parcheadas en absoluto. En JVM independiente dirías -Djava.library.path=/libs/armeabi o modificar la variable de entorno LD_LIBRARY_PATH. En Android, supongo que puedes buscar la propiedad del sistema java.library.path y coloque sus bibliotecas en algún lugar conocido (pero antes de la carpeta donde están las versiones del sistema) o modifique la propiedad: anteponga la ruta a sus versiones locales. Tengo algo de experiencia con Android pero no específicamente con NDK.

Respondido el 12 de junio de 12 a las 20:06

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