System.loadLibrary()流程分析

本文分析了Java中System.loadLibrary()的执行流程,从System.java开始,经Runtime.java,再到native方法的调用,涉及dalvik.system包下的隐藏API以及C语言层面的实现,包括VMStack_getCallingClassLoader、nativeLoad和LoadNativeLibrary等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在java代码中调用 System.loadLibrary(String fileName); 


-> System.java - loadLibrary(String fileName); 


-> Runtime.java - loadLibrary(String libName) 


-> loadLibrary(String libName,ClassLoader loader);

ClassLoader通过调用VMStack.getCallingClassLoader() 得到,VMStack在package dalvik.system下 有hide标记,调用了package art.runtime.native 下的dalvik_system_VMStack.cc中的VMStack_getCallingClassLoader方法


-> doLoad(String name,ClassLoader loader);


-> nativeLoad(String fileName,Classloader loader,String ldLibraryPath);


ldLibraryPath 的获取调用 classLoader.getLdLibraryPath();具体实现在package dalvik.system的BaseDexClassLoader中getLdlibraryPath有hide标记,需要下载源码

 

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java455 in java.library.path: C:\Users\35115\.jdks\corretto-18.0.2\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;E:\桌面;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps;C:\windows\system32\HWAudioDriver\;E:\APP\MATLAB2022b\runtime\win64;E:\APP\MATLAB2022b\bin;E:\桌面\apache-maven-3.6.3\bin;E:\桌面\jdk1.8.0\jdk1.8.0\bin;E:\桌面\jdk1.8.0\jdk1.8.0\bin;C:\Program Files\dotnet\;E:\网页下载\opencv\build;C:\Users\35115\AppData\Local\Microsoft\WindowsApps;E:\APP\Bin;C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.1.1\bin;;E:\APP\IDEA\IntelliJ IDEA Community Edition 2024.2.3\bin;E:\APP\MATLAB2022b\bin;E:\APP\qq\Bin;E:\APP\WeChat;D:\汽水音乐\Soda Music;D:\steam;D:\35115\WPS\WPS Office;D:\Program Files\TxGameAssistant\AppMarket;E:\eclipse\eclipse_win64;E:\APP\Chrome\Application;E:\APP\flsh\FlashCenter;D:\Program Files (x86)\WeGame;E:\APP\Chrome\Application\chrome.exe;E:\APP\WPS\WPS Office;C:\Users\35115\AppData\Local\Programs\Microsoft VS Code\bin;. at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2434) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:848) at java.base/java.lang.System.loadLibrary(System.java:2015) at video.main(video.java:14)
最新发布
03-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值