0

我有一个带有 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 文件夹中加载任何其他预构建的库,它会毫无错误地加载它。我什至可以用 fopen 打开我的 .so 没有问题,所以路径是正确的。它只发生在我的库中的事实真的让我很烦。提前感谢您的帮助。

4

1 回答 1

3

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

void* handle = dlopen("mytestlib.so", RTLD_LAZY);
于 2013-10-24T17:25:32.207 回答