You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib64/libdl.so" needed or dlopened by "/system/lib64/libnativeloader.so" is not accessible for the namespace "classloader-namespace"
#5
Closed
zzyyppqq opened this issue
Mar 1, 2023
· 1 comment
2023-03-01 14:38:46.899 5737-5737/com.example.nativecpp I/hello: path /data/user/0/com.example.nativecpp/files/dynamic_so/
2023-03-01 14:38:46.905 5737-5737/com.example.nativecpp I/hello: dependencies: [libnativecpp.so, liblog.so, libm.so, libdl.so, libc.so]
2023-03-01 14:38:46.909 5737-5737/com.example.nativecpp I/hello: dependencies: [liblog.so, libm.so, libdl.so, libc.so]
2023-03-01 14:38:46.909 5737-5737/com.example.nativecpp I/hello: dependencySo: log
2023-03-01 14:38:46.910 5737-5737/com.example.nativecpp I/hello: dependencySo: m
2023-03-01 14:38:46.911 5737-5737/com.example.nativecpp I/hello: dependencySo: dl
2023-03-01 14:38:46.913 5737-5737/com.example.nativecpp E/linker: library "/system/lib64/libdl.so" ("/system/lib64/libdl.so") needed or dlopened by "/system/lib64/libnativeloader.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="", permitted_paths="/data:/mnt/expand:/data/data/com.example.nativecpp"]
2023-03-01 14:38:46.914 5737-5737/com.example.nativecpp D/AndroidRuntime: Shutting down VM
2023-03-01 14:38:46.914 5737-5737/com.example.nativecpp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.nativecpp, PID: 5737
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib64/libdl.so" needed or dlopened by "/system/lib64/libnativeloader.so" is not accessible for the namespace "classloader-namespace"
at java.lang.Runtime.loadLibrary0(Runtime.java:977)
at java.lang.System.loadLibrary(System.java:1530)
at com.example.lib_sillyboy.DynamicSo.loadStaticSo(DynamicSo.java:45)
at com.example.lib_sillyboy.DynamicSo.loadStaticSo(DynamicSo.java:38)
at com.example.nativecpp.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:6666)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
添加日志代码:
public class DynamicSo {
public static void loadStaticSo(File soFIle, String path) {
try {
ElfParser parser = null;
List dependencies = null;
try {
parser = new ElfParser(soFIle);
dependencies = parser.parseNeededDependencies();
} catch (Throwable e) {
throw e;
} finally {
if (parser != null) {
parser.close();
}
}
Log.i("hello", "dependencies: " + dependencies);
//如果nativecpp3->nativecpptwo->nativecpp 则先加载 DynamicSo.loadStaticSo(nativecpptwo),此时nativecpp作为nativecpptwo的直接依赖被加载了
//不能直接加载nativecpp3,导致加载直接依赖nativetwo的时候nativecpp没加载导致错误。 这个可以优化,比如递归
for (final String dependency : dependencies) {
前置条件:
1、系统版本Android7.0、已Root
2、Demo代码未修改逻辑,只添加了几行日志
3、运行前已导入so [libnativecpp.so、libnativecpptwo.so]到此目录: /data/user/0/com.example.nativecpp/files/dynamic_so/
4、
arm-linux-androideabi-readelf -d libnativecpptwo.so
Dynamic section at offset 0xdc8 contains 28 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libnativecpp.so]
0x0000000000000001 (NEEDED) Shared library: [liblog.so]
0x0000000000000001 (NEEDED) Shared library: [libm.so]
0x0000000000000001 (NEEDED) Shared library: [libdl.so]
0x0000000000000001 (NEEDED) Shared library: [libc.so]
0x000000000000000e (SONAME) Library soname: [libnativecpptwo.so]
5、$ /data/user/0/com.example.nativecpp/files/dynamic_so # ls -al
-rwxrwxrwx 1 root root 1414352 2023-03-01 11:48 libnativecpp.so
-rwxrwxrwx 1 root root 60120 2023-03-01 11:48 libnativecpptwo.so
运行日志如下:
2023-03-01 14:38:46.899 5737-5737/com.example.nativecpp I/hello: path /data/user/0/com.example.nativecpp/files/dynamic_so/
2023-03-01 14:38:46.905 5737-5737/com.example.nativecpp I/hello: dependencies: [libnativecpp.so, liblog.so, libm.so, libdl.so, libc.so]
2023-03-01 14:38:46.909 5737-5737/com.example.nativecpp I/hello: dependencies: [liblog.so, libm.so, libdl.so, libc.so]
2023-03-01 14:38:46.909 5737-5737/com.example.nativecpp I/hello: dependencySo: log
2023-03-01 14:38:46.910 5737-5737/com.example.nativecpp I/hello: dependencySo: m
2023-03-01 14:38:46.911 5737-5737/com.example.nativecpp I/hello: dependencySo: dl
2023-03-01 14:38:46.913 5737-5737/com.example.nativecpp E/linker: library "/system/lib64/libdl.so" ("/system/lib64/libdl.so") needed or dlopened by "/system/lib64/libnativeloader.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="", permitted_paths="/data:/mnt/expand:/data/data/com.example.nativecpp"]
2023-03-01 14:38:46.914 5737-5737/com.example.nativecpp D/AndroidRuntime: Shutting down VM
2023-03-01 14:38:46.914 5737-5737/com.example.nativecpp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.nativecpp, PID: 5737
java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib64/libdl.so" needed or dlopened by "/system/lib64/libnativeloader.so" is not accessible for the namespace "classloader-namespace"
at java.lang.Runtime.loadLibrary0(Runtime.java:977)
at java.lang.System.loadLibrary(System.java:1530)
at com.example.lib_sillyboy.DynamicSo.loadStaticSo(DynamicSo.java:45)
at com.example.lib_sillyboy.DynamicSo.loadStaticSo(DynamicSo.java:38)
at com.example.nativecpp.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:6666)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
添加日志代码:
public class DynamicSo {
public static void loadStaticSo(File soFIle, String path) {
try {
ElfParser parser = null;
List dependencies = null;
try {
parser = new ElfParser(soFIle);
dependencies = parser.parseNeededDependencies();
} catch (Throwable e) {
throw e;
} finally {
if (parser != null) {
parser.close();
}
}
Log.i("hello", "dependencies: " + dependencies);
//如果nativecpp3->nativecpptwo->nativecpp 则先加载 DynamicSo.loadStaticSo(nativecpptwo),此时nativecpp作为nativecpptwo的直接依赖被加载了
//不能直接加载nativecpp3,导致加载直接依赖nativetwo的时候nativecpp没加载导致错误。 这个可以优化,比如递归
for (final String dependency : dependencies) {
The text was updated successfully, but these errors were encountered: