升级到ndk 8b我收到一些崩溃报告(大多数是带有
Android 4.03的Galaxy SII)
java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1286]: 1836 cannot locate '__gnu_thumb1_case_uqi'... at java.lang.Runtime.loadLibrary(Runtime.java:370) at java.lang.System.loadLibrary(System.java:535) at com.iuculano.fplayer.SDLActivity.void onCreate(android.os.Bundle)(SourceFile:324) at android.app.Activity.performCreate(Activity.java:4465) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) at android.app.ActivityThread.access$600(ActivityThread.java:127) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4507) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) at dalvik.system.NativeStart.main(Native Method)
异常是由一个简单的System.loadLibrary(“main”)引起的;
这是什么意思?找不到’__gnu_thumb1_case_uqi’
解决方法
__gnu_thumb1_case_uqi是一个帮助程序,它在密集打包的交换机表上执行索引跳转;快速实现切换.您有两种选择:避免它或与之链接.
如果增加优化级别(使用-O3),则可能不需要此符号.此外,更改cpu可能有助于使用thumb2指令.使用-ffreestanding选项进行编译也可以避免使用此符号.如果您可以控制switch语句,则可以使用函数指针数组替换它.
这个例程在libgcc中.您可以静态链接libgcc.在Android SDK /编译器的某个地方,必须有一个libgcc.a.链接libgcc.a,使用-L和-l或使用-static-libgcc链接器选项来获取代码(参见http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html).
编辑:如果您没有编译任何内容,那么您可以在系统上找到libgcc.so.它可能位于/ lib或/usr/lib中,或者可能是Android设备的一些奇怪之处.将libgcc.so所在的目录添加到环境变量LD_LIBRARY_PATH也可以解决问题.可能不幸的是,三星发布了不兼容的二进制文件,如果您没有编译自己的代码,则无法解决问题.正确的libgcc.so可能在/usr/lib / thumb之类的内容中用于多库分发.我对Davlik的东西知之甚少,但Android JVM在运行时可能没有指向正确的库集.