升级到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");
这是什么意思? cannot locate '__gnu_thumb1_case_uqi'
答案 0 :(得分:6)
__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
。对于Android设备,它可能位于/lib
或/usr/lib
或某些地方。将libgcc.so
所在的目录添加到环境变量 LD_LIBRARY_PATH
也可以解决问题。可能不幸的是,三星发布了不兼容的二进制文件,如果您没有编译自己的代码,则无法解决问题。对于多库分布,可能在libgcc.so
之内的正确/usr/lib/thumb
。我对Davlik的东西知之甚少,但Android JVM在运行时可能没有指向正确的库集。
答案 1 :(得分:2)
你在为armv7编译吗?如果你不是,请尝试编译armv7。
答案 2 :(得分:1)
Producing optimised NDK code for multiple architectures?
在上面链接中接受的答案中阅读'arm'vs'thumb'。
然后,删除您的配置说明以构建拇指并验证您正在构建arm ...
... OR
生病了......你的'Android.mk'中的链接器声明中的库顺序
尝试使用谷歌论坛获取ndk ...搜索“无法找到符号”...
真的很绝望?
请参阅“运行时错误”部分here