Cómo habilitar la salida de depuración en el vinculador dinámico en Android?
Backgroud:
Mi aplicación no se ejecuta en la etapa de enlace y obtener el msg siguiente:
- Carga de bibliotecas compartidas con dependencias en Android
- Compilación de SDL2 para Android
- Referencias indefinidas enlazan una biblioteca compartida pre-construida en Android con NDK
- Error de referencia indefinido - rand
- Generar Dropbear dbclient binario para Android
Link_image [1995] … lib1.so
No se puede vincular ejecutable
La aplicación depende de varias bibliotecas dinámicas de la siguiente manera:
App necesita lib1, lib1 dlopen lib2 y en lib1 hay un símbolo exportado por la aplicación (una variable global).
He probado lib2 con un programa simple que está bien. Así que creo que el fracaso se debe a lib1 en la etapa de enlace . (Puedo prometer que todas las otras libs que la aplicación necesita está en el directorio actual y el "./" se ha añadido a LD_LIBRARY_PATH.También traté de poner todas las libs A / system / lib)
Pregunta:
- ¿Cómo puedo habilitar la salida de depuración del vinculador para obtener un mensaje de error detallado?
- ¿Alguna otra sugerencia?
Edit1: después de una prueba más, parece que el error de enlace se debe al símbolo global referenciado por la lib1 que se define en main.c
¿Necesita Android banderas de construcción adicionales para habilitar var global de referencia en main?
- Biblioteca vinculada dinámica de Android no puede resolver símbolos del programa principal
- Referencia indefinida a 'cv :: initModule_nonfree ()' En Android
- MvvmCross Android problema de enlace en el convertidor de visibilidad
- Cómo capturar UnsatisifiedLinkError cuando se utiliza biblioteca NDK-construida en una aplicación para Android?
- Distribuir la biblioteca NDK con gnustl?
- Android NDK: Intentando conectar JnetPcap
Tienes que recompilar. Coge la fuente apropiada (sucursal, etiqueta) aquí:
https://github.com/android/platform_bionic/tree/master/linker
En Android.mk, desea establecer esto en 1:
# Set LINKER_DEBUG to either 1 or 0 # LOCAL_CFLAGS += -DLINKER_DEBUG=0
Si desea bajar, consulte TRACE () y DL_ERR (). Como verá, TRACE () es preprocesador definido y por lo tanto compilado. De lo contrario podría haber rápidamente parcheado en su propio valor para debug_verbosity o sus controles.