java的System.load和System.loadLibrary

本文深入探讨了Java中用于加载本地库的System.load和System.loadLibrary方法。介绍了两者的区别,使用场景以及如何在JNI中调用本地库,帮助开发者更好地理解和应用这些功能。

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

  • 1.这两个函数实现通过指定的路径载入和链接动态库,比如在JNI中想载入C,C++编译生成的*.dll文件。
  • 2.public static void load (String pathName)函数中,参数pathName是绝对路径,例如:System.load("E:/test.dll"); 后缀名不可少。
  • 3.public static void loadLibrary (String libName),参数是动态库的名称,没有后缀,系统自动判断。那么库文件应该放在哪里呢。
  • 应该放在java.library.path这一jvm变量所指向的路径中。
  • 可以通过:System.getProperty("java.library.path");得到这个路径。也可以放在程序当前目录,可以通过:System.getProperty("user.dir");获得程序当前目录。
  • 你也可以设定java.library.path这一jvm变量:
  • 右键你的java工程,properties -> Java Build Path -> Source -> Native library location -> Edit ,设定成你想要的路径,再把库文件拷到里面就OK了,当然对于加载的动态库,也只能放到这个路径里了。也可以右键src,设定其属性的Native Library,两者设定的是同一个变量。
  • 4.如果你要载入的库文件静态链接到其它动态链接库,例如TestJNI.dll 静态链接到dependency.dll,应当注意:
  • 因为jvm在载入TestJNI.dll会先去载入TestJNI.dll所依赖的库文件dependency.dll,如果都使用System.load来载入,那么先载入dependency.dll,再载入TestJNI.dll。
  • 总结:建议使用System.loadLibrary,并且自己设定java.library.path。

  • 参考:http://blog.youkuaiyun.com/forandever/article/details/5983846

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值