无法链接libstlport_shared,即使它存在......?

时间:2011-09-17 17:48:52

标签: android c++ shared-libraries android-ndk

我准备开始在这里开始撞墙了。我已经阅读了关于这个问题我可以找到的每个SO线程,阅读每个谷歌搜索结果的问题并且找不到深蹲。我正在构建一个Android应用程序,我用C ++编写了一个2D引擎,我正在使用与NDK r6b共享版本的stlport。生成libstlport_shared的.so文件并成功复制到我的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引擎。

有人遇到过这样的问题吗?有任何想法吗?还要注意我在libstlport_shared上做了一个objdump来检查它的deps。我确认它们存在于我的设备上,并且在尝试加载libstlport_shared之前甚至在我的java代码中显式加载它们。没有区别。提前谢谢!

同时

这是该问题的第二个可选组件。我想到的但尚未尝试的一个解决方案是使用System.load(absolutePathToLibrary),但我找不到如何在java中生成此路径。出于显而易见的原因,我不想硬编码。再次感谢!

1 个答案:

答案 0 :(得分:2)

好吧,好像我找到了一个解决方案。我基本上只是放弃使用stl端口的共享版本并切换到静态。然后,我使用Application.mk标志重建静态版本:STLPORT_FORCE_REBUILD := true

然而,我仍有奇怪的问题。它编译一次,安装得很好。然后我做了一个干净,重新编译/部署,它将完成正常建设,然后告诉我我的应用程序在对话框中有错误,但实际上没有在日食。我退出了eclipse,重新启动它,清理并重建,现在一切正常。似乎最新的NDK存在一些错误/问题...希望在NDK r7执行完整的STL端口时会出现例外情况等。