解决不良DT_NEEDED位置我有一个预建图书馆(libprebuilt.so),并与库链接我的C程序(myprogram.c)。如何在Android的6
我遵循本教程(https://developer.android.com/ndk/guides/prebuilts.html),它适用于Android 5(API 22)设备。
这是我Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libprebuilt
LOCAL_SRC_FILES := libprebuilt.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := myprogram
LOCAL_SRC_FILES := myprogram.c
LOCAL_SHARED_LIBRARIES := libprebuilt
include $(BUILD_SHARED_LIBRARY)
然后我做了NDK-建立和文件夹库重命名为jniLibs。
这是我的java程序
try {
System.loadLibrary("prebuilt");
System.loadLibrary("myprogram");
} catch (UnsatisfiedLinkError ule) {
Log.e("Error", ule.getMessage());
}
然而,当我与Android测试6设备,它不工作,并提供以下错误。
dlopen failed: library "/my/build/machine/obj/local/armeabi/libprebuilt.so" not found
我在Android 6的变化(https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html)是
此版本更新的动态链接程序的行为发现。动态链接器现在理解图书馆的soname和它的路径(公共bug 6670)之间的区别,soname的搜索现在已经实现。以前工作过的具有错误DT_NEEDED条目的应用程序(通常是生成计算机文件系统上的绝对路径)在加载时可能会失败。
所以,问题是,DT_NEEDED项不正确定位,并在我的本地构建机器路径myprogram负载libprebuilt.so。我能做些什么来解决它?