【发布时间】:2014-06-12 02:16:50
【问题描述】:
当我在我的应用程序中嵌入 libabc.so 时,它可以正常工作
System.LoadLibrary("abc");
但是,当我将 libabc.so 移动到 /system/lib/ 并尝试使用
System.Load("/system/lib/libabc.so"); 我在 logcat 中收到以下链接器错误:
06-12 04:42:09.864: D/dalvikvm(17630): 试图加载 lib /system/lib/libabc.so 0x4254afd8
06-12 04:42:09.869: E/linker(17630): "libabc.so": 忽略共享库中的 2-entry DT_PREINIT_ARRAY!
06-12 04:42:09.869: D/dalvikvm(17630): 添加共享库 /system/lib/libabc.so 0x4254afd8
06-12 04:42:09.869: D/dalvikvm(17630): 在 /system/lib/libabc.so 0x4254afd8 中找不到 JNI_OnLoad,跳过初始化
它实际上加载了我的库,但我无法调用导出的函数(它表明未实现本机方法)。
为什么?
【问题讨论】:
-
顺便说一下,当你将
libabc.so移动到/system/lib/时,你仍然可以用System.loadLibrary("abc");加载它 -
可能是应用包名变了?
-
没有。相同的应用程序。只是改变功能和重建。我意识到从 /data/app-lib/myappname/ 加载的所有内容都很好,但从其他地方加载它就无法正常工作......为什么?
-
更改哪个功能?正如我所写,您可以使用
System.loadLibrary("abc")从/system/lib/加载。 -
我知道,它确实加载了库。但我不能调用导出的函数。好像它们没有实施。唯一可行的方法是从 /data/app-lib/myappname/ 加载库
标签: android android-ndk