2011-09-17 21 views
6

Estoy a punto de comenzar a golpear mi cabeza contra la pared aquí. He leído todos los hilos SO que puedo encontrar sobre este tema, leo todos los resultados de Google sobre el tema y no puedo encontrar la posición en cuclillas. Estoy construyendo una aplicación de Android donde escribí un motor 2D en C++ y estoy usando la versión compartida de stlport con NDK r6b. El archivo .so para libstlport_shared se genera y se copia correctamente en mi carpeta libs. Incluso comprobé usando adb shell en el dispositivo y el archivo .so se copió correctamente.Error al vincular libstlport_shared, aunque esté presente ...?

Intenté varias soluciones, como la modificación de mi archivo .mk para declarar explícitamente libstlport_shared.so como un módulo obligatorio. Durante el tiempo de compilación, todo va bien, aparece en la APK y se copia con éxito en el dispositivo. Sin embargo, me sale este error:

09-17 17:35:26.450: DEBUG/dalvikvm(19277): Trying to load lib /data/data/ca.ascensionsystems.mypackagename/lib/libstlport_shared.so 0x476c6f30 
09-17 17:35:26.450: INFO/dalvikvm(19277): Unable to dlopen(/data/data/ca.ascensionsystems.mypackagename/lib/libstlport_shared.so): Cannot load library: link_image[1995]: failed to link libstlport_shared.so 
09-17 17:35:26.450: WARN/dalvikvm(19277): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lca/ascensionsystems/mypackagename/Ascengine;.<clinit> 
09-17 17:35:26.450: WARN/dalvikvm(19277): threadid=8: thread exiting with uncaught exception (group=0x40025a70) 
09-17 17:35:26.470: VERBOSE/WindowManager(4837): Remove Window{479ca678 Starting ca.ascensionsystems.mypackagename paused=false}: mSurface=Surface(name=Starting ca.ascensionsystems.mypackagename, identity=90) mExiting=false isAnimating=true [email protected] inPendingTransaction=false mDisplayFrozen=false 
09-17 17:35:26.470: ERROR/WindowManager(4837): return in removeWindowLocked 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277): FATAL EXCEPTION: GLThread 9 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277): java.lang.ExceptionInInitializerError 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at ca.ascensionsystems.mypackagename.GL2JNIView$Renderer.onSurfaceChanged(GL2JNIView.java:336) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1327) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277): Caused by: java.lang.UnsatisfiedLinkError: Library stlport_shared not found 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at java.lang.Runtime.loadLibrary(Runtime.java:461) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at java.lang.System.loadLibrary(System.java:557) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  at ca.ascensionsystems.mypackagename.Ascengine.<clinit>(Ascengine.java:26) 
09-17 17:35:26.490: ERROR/AndroidRuntime(19277):  ... 3 more 
09-17 17:35:26.500: WARN/ActivityManager(4837): Force finishing activity ca.ascensionsystems.mypackagename/.mypackagenameActivity 

Tenga en cuenta que he sustituido mi nombre verdadero paquete con "nombre_paquete" para no revelar el nombre de increíble súper secreto de mi próximo juego. :) También tenga en cuenta que Ascengine es otro .SO, mi aplicación principal SO, que es mi motor 2D.

¿Alguien tiene un problema como este? ¿Algunas ideas? También tenga en cuenta que hice un objdump en libstlport_shared para verificar sus deps. Confirmé que existen en mi dispositivo con DDMS e incluso los cargué explícitamente en mi código java antes de intentar cargar libstlport_shared. No hizo ninguna diferencia. ¡Gracias por adelantado!

TAMBIÉN

esto es una especie de un segundo componente, opcional a la pregunta. Una solución que he pensado pero que aún no he probado es usar System.load (absolutePathToLibrary) pero no puedo encontrar cómo generar esta ruta dentro de Java. No quiero codificarlo, por razones obvias. ¡Gracias de nuevo!

+0

Tengo un problema similar, ¿me pueden ayudar? http://stackoverflow.com/questions/11483078/library-stlport-shared-not-found-in-titanium-application – Mari

Respuesta

2

Bueno, parece que he encontrado una solución, más o menos. Básicamente, abandoné el uso de la versión compartida del puerto stl y cambié a estática. Luego reconstruí la versión estática con el indicador Application.mk: STLPORT_FORCE_REBUILD := true

Sin embargo, todavía tenía problemas extraños. Compiló una vez e instaló bien. Luego hice un clean and recomplied/deployed y terminaría de construir bien, luego dime que mi aplicación tenía errores en un cuadro de diálogo pero no en eclipse. Salí del eclipse, lo reinicié, lo limpié y reconstruí, y todo funciona ahora. Parece que hay algunos errores/problemas con el último NDK ... con suerte se solucionará con NDK r7 cuando hacen un puerto completo de STL con excepciones, etc.

Cuestiones relacionadas