2011-09-17 15 views
6

Sono quasi pronto per iniziare a sbattere la testa dal muro qui. Ho letto ogni thread SO che posso trovare su questo problema, leggere ogni singolo risultato di Google sul problema e non riesco a trovare lo squat. Sto costruendo un'app per Android in cui ho scritto un motore 2D in C++ e sto utilizzando la versione condivisa di stlport con NDK r6b. Il file .so per libstlport_shared viene generato e copiato con successo nella mia cartella libs. Ho anche controllato l'utilizzo della shell adb sul dispositivo e il file .so è stato copiato correttamente.Impossibile collegare libstlport_shared, anche se è presente ...?

Ho provato varie soluzioni, come la modifica del mio file .mk per dichiarare esplicitamente libstlport_shared.so come un modulo richiesto. Durante la compilazione tutto va alla grande, si presenta nell'APK, con successo copia sul dispositivo. Eppure, ottengo questo errore:

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 

Si noti che ho sostituito il mio vero nome del pacchetto con "nomedelmiopacchetto" per non dare via il nome impressionante super-segreto del mio prossimo gioco. :) Nota anche Ascengine è un'altra .SO, la mia applicazione principale SO, che è il mio motore 2D.

Qualcuno ha riscontrato un problema come questo? Qualche idea? Nota anche che ho eseguito un objdump su libstlport_shared per controllarne i deps. Ho confermato che esistono sul mio dispositivo con DDMS e anche caricati esplicitamente nel mio codice java prima di provare a caricare libstlport_shared. Non ha fatto differenza Grazie in anticipo!

ANCHE

questo è una specie di un secondo componente, opzionale per la questione. Una soluzione a cui ho pensato ma che non ho ancora provato è quella di utilizzare System.load (absolutePathToLibrary) ma non riesco a trovare come generare questo percorso all'interno di java. Non voglio programmarlo a fondo, per ovvi motivi. Grazie ancora!

+0

Ho un problema simile, puoi aiutarmi? http://stackoverflow.com/questions/11483078/library-stlport-shared-not-found-in-titanium-application – Mari

risposta

2

Ok, sembra che abbia trovato una soluzione, una specie di. Fondamentalmente ho semplicemente abbandonato la versione condivisa della porta di stl e passata a statica. Ho quindi ricostruito la versione statica utilizzando il flag Application.mk: STLPORT_FORCE_REBUILD := true

Tuttavia, ho ancora avuto problemi strani. Ha compilato una volta e installato bene. Poi ho fatto un lavoro pulito e ricomposto/implementato e finirebbe la costruzione, quindi dimmi che la mia app ha avuto errori in una finestra di dialogo ma non in realtà in eclissi. Sono uscito dall'eclissi, lo ho riavviato, pulito e ricostruito e tutto funziona ora. Sembra che ci siano alcuni bug/problemi con l'ultimo NDK ... si spera che vengano corretti con NDK r7 quando eseguono una porta STL completa con eccezioni ecc.

Problemi correlati