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

Failed to link libstlport_shared, even though it's present...?

本文关键字:存在 shared 链接 libstlport      更新时间:2023-10-16

我已经准备好开始拼命了。我读了我能找到的关于这个问题的每一个帖子,读了关于这个问题的每一个谷歌结果,什么也找不到。我正在构建一个android应用程序,我在c++中编写了一个2D引擎,我正在使用NDK r6b的stlport共享版本。生成libstlport_shared的。so文件并成功复制到我的libs文件夹中。我甚至检查了在设备上使用adb shell和。so文件被正确复制。

我尝试了各种解决方案,例如修改我的.mk文件来显式声明libstlport_shared。作为必修模块。在编译期间一切都很顺利,它出现在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,我的主要应用程序,这是我的2D引擎。

有人遇到过这样的问题吗?什么好主意吗?还请注意,我对libstlport_shared执行了objdump以检查其深度。我用DDMS确认它们存在于我的设备上,甚至在尝试加载libstlport_shared之前显式地将它们加载到我的java代码中。没有区别。提前感谢!

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

好吧,看来我找到了解决办法。我基本上放弃了使用stl端口的共享版本,转而使用静态端口。然后使用Application重新构建静态版本。mk flag: STLPORT_FORCE_REBUILD := true

然而,我仍然有奇怪的问题。它编译一次并安装良好。然后我做了一个干净的和重新编译/部署,它会完成构建很好,然后告诉我我的应用程序在对话框中有错误,但实际上不是在eclipse中。我退出eclipse,重新启动它,清理和重建,它现在都工作了。似乎最新的NDK有一些bug/问题…希望在NDK r7中修复,当他们做一个完整的STL端口时,会有异常等