Не удалось связать libstlport_shared, даже если он присутствует ...? - PullRequest
7 голосов
/ 17 сентября 2011

Я почти готов начать стучать головой о стену здесь. Я прочитал все темы, которые я могу найти об этой проблеме, прочитал все результаты Google по этой проблеме и не могу найти присед. Я создаю приложение для Android, где я написал 2D-движок на C ++ и использую совместно используемую версию stlport с NDK r6b. .So файл для libstlport_shared генерируется и успешно копируется в мою папку libs. Я даже проверил, используя adb shell на устройстве, и .so файл скопирован правильно.

Я пробовал различные решения, такие как изменение моего файла .mk для явного объявления libstlport_shared.so как обязательного модуля. Во время компиляции все идет отлично, он отображается в APK, он успешно копирует на устройство. Все же я получаю эту ошибку:

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 app-animation=android.view.animation.AnimationSet@4794fa10 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

Обратите внимание, что я заменил свое настоящее имя пакета на «mypackagename», чтобы не выдавать суперсекретное удивительное имя моей предстоящей игры. :) Также обратите внимание, что Ascengine - это еще одно .SO, мое основное приложение SO, которое является моим 2D движком.

Кто-нибудь сталкивался с такой проблемой? Есть идеи? Также обратите внимание, что я сделал objdump для libstlport_shared, чтобы проверить его deps. Я подтвердил, что они существуют на моем устройстве с DDMS, и даже явно загрузил их в мой код Java, прежде чем пытаться загрузить libstlport_shared. Не сделал разницы Заранее спасибо!

ТАКЖЕ

Это своего рода второй, необязательный компонент вопроса. Одно решение, о котором я думал, но еще не пытался, - это использовать System.load (absolutePathToLibrary), но я не могу найти, как сгенерировать этот путь в Java. Я не хочу жестко его кодировать по понятным причинам. Еще раз спасибо!

1 Ответ

2 голосов
/ 18 сентября 2011

Хорошо, похоже, я нашел решение, вроде.Я просто отказался от использования общей версии порта stl и переключился на статический.Затем я перестроил статическую версию, используя флаг Application.mk: STLPORT_FORCE_REBUILD := true

Однако у меня все еще были странные проблемы.Он скомпилирован один раз и установлен нормально.Затем я выполнил очистку и перекомпилировал / развернул, и он закончил бы сборку нормально, затем сказал, что в моем приложении были ошибки в диалоговом окне, но на самом деле не было затмения.Я вышел из затмения, перезапустил его, почистил и восстановил, и теперь все работает.Кажется, что есть некоторые ошибки / проблемы с последним NDK ... надеюсь, будет исправлено с помощью NDK r7, когда они делают полный STL-порт с исключениями и т. Д.

...