无法通过jni加载库

时间:2013-10-24 13:15:53

标签: android android-ndk java-native-interface

我有一个带有jni的Java项目,本机部分工作正常。我需要使用dlopen()从我的jni c文件中加载预构建的(使用ndk构建).so文件。

但是,我得到以下dlerror:无法加载库:load_library [1093]:“system / lib / mytestlib.so”找不到库

JNI代码:

void* handle = dlopen("system/lib/mytestlib.so", RTLD_LAZY);
if(handle == NULL)
{
        char* er = dlerror();
        __android_log_print(ANDROID_LOG_DEBUG, TAG, "dlerror: %s", er);
}

有趣的是,如果我尝试从手机的/ system / lib文件夹加载任何其他预建的lib,它会加载它而不会出错。我甚至可以毫无问题地打开我的.so,所以路径是正确的。事实上它只发生在我的lib上真的很烦我。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

你错过/ system之前。你应该提供一个绝对路径,你不能依赖当前目录是文件系统root。幸运的是,/system/lib位于LD_LIBRARY_PATH,因此您可以写

void* handle = dlopen("mytestlib.so", RTLD_LAZY);