【发布时间】:2015-02-13 17:05:29
【问题描述】:
在我的 java 类中,我有这个:
static
{
System.loadLibrary("c++_shared");
System.loadLibrary("com.testandroid.LibAndroidBridge");
}
我的 Application.mk 有这个:
NDK_TOOLCHAIN_VERSION:=4.8
APP_STL := c++_shared
APP_ABI := x86
一切正常,但是当我运行应用程序时(在模拟器或设备上,所以 x85 和 arm)我在 LogCat 中得到了这个:
02-13 12:00:32.174: D/dalvikvm(2142): Trying to load lib /data/app-lib/com.testandroid-1/libc++_shared.so 0xb0fcfc60
02-13 12:00:32.174: D/dalvikvm(2142): Added shared lib /data/app-lib/com.testandroid-1/libc++_shared.so 0xb0fcfc60
02-13 12:00:32.174: D/dalvikvm(2142): No JNI_OnLoad found in /data/app-lib/com.testandroid-1/libc++_shared.so 0xb0fcfc60, skipping init
02-13 12:00:32.174: D/dalvikvm(2142): Trying to load lib /data/app-lib/com.testandroid-1/libcom.testandroid.LibAndroidBridge.so 0xb0fcfc60
02-13 12:00:32.174: E/dalvikvm(2142): dlopen("/data/app-lib/com.testandroid-1/libcom.testandroid.LibAndroidBridge.so") failed: dlopen failed: cannot locate symbol "rand" referenced by "libcom.testandroid.LibAndroidBridge.so"...
02-13 12:00:32.174: W/dalvikvm(2142): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/testandroid/AriesLib;
02-13 12:00:32.174: D/AndroidRuntime(2142): Shutting down VM
02-13 12:00:32.174: W/dalvikvm(2142): threadid=1: thread exiting with uncaught exception (group=0xb0cb0b20)
02-13 12:00:32.174: E/AndroidRuntime(2142): FATAL EXCEPTION: main
02-13 12:00:32.174: E/AndroidRuntime(2142): Process: com.testandroid, PID: 2142
02-13 12:00:32.174: E/AndroidRuntime(2142): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "rand" referenced by "libcom.testandroid.LibAndroidBridge.so"...
02-13 12:00:32.174: E/AndroidRuntime(2142): at java.lang.Runtime.loadLibrary(Runtime.java:364)
有人知道为什么无法导入 c++_shared.so 库吗?
【问题讨论】:
-
你为什么要这么做
System.loadLibrary("c++_shared");? C++ 标准库是用 C++ 编写的,几乎不包含任何 JNI 可访问的符号。你的具体目标是什么? -
我的理解是,为了强制这个库为c++加载,我需要在java代码中作为库加载。
-
最终目标是摆脱丢失的“rand”符号
-
4.4.2 以 sdk 19 为目标
标签: android android-ndk