我有一个带有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上真的很烦我。提前感谢您的帮助。
答案 0 :(得分:3)
你错过/ system
之前。你应该提供一个绝对路径,你不能依赖当前目录是文件系统root。幸运的是,/system/lib
位于LD_LIBRARY_PATH,因此您可以写
void* handle = dlopen("mytestlib.so", RTLD_LAZY);