从Luajava的使用看jdk的LoadLibrary查找机制
2014-01-14 20:48
204 查看
我这是双系统,一个win7-32bit,一个win7-64bit
同一个luajava-1.1.dll,我在win32下,放到system32下面,能正常使用。但是在win64下,放到system32确无法使用。
开始以为是这个dll不支持64位系统,准备去在win64重新编译luajava。
突然,想起了java的异常报的是文件不存在,于是去跟踪jdk的LoadLibrary代码,JDK的确是会在所有path中寻找dll的啊,为什么会找不到呢?
继续深入,结果发现在
于是,我把luajava-1.1.dll移动到了另一个path包含的路径中(%JAVA_HOME%\bin),运行,一切OK!
总结:除了注意地方,还要留意权限
ps: win64的为啥也有system32而不是system64呢?.. 不要在意这些细节...
同一个luajava-1.1.dll,我在win32下,放到system32下面,能正常使用。但是在win64下,放到system32确无法使用。
开始以为是这个dll不支持64位系统,准备去在win64重新编译luajava。
突然,想起了java的异常报的是文件不存在,于是去跟踪jdk的LoadLibrary代码,JDK的确是会在所有path中寻找dll的啊,为什么会找不到呢?
继续深入,结果发现在
boolean exists = AccessController.doPrivileged( new PrivilegedAction<Object>() { public Object run() { return file.exists() ? Boolean.TRUE : null; }}) != null; if (!exists) { return false; }当file路径是c:\windows\system32\luajava-1.1.dll的时候,这里竟然返回不存在。于是猜测是否因为system32的权限比较高的原因。
于是,我把luajava-1.1.dll移动到了另一个path包含的路径中(%JAVA_HOME%\bin),运行,一切OK!
总结:除了注意地方,还要留意权限
ps: win64的为啥也有system32而不是system64呢?.. 不要在意这些细节...
相关文章推荐
- 使用JDK的javaagent机制时候,遇到的蛋疼无比的ClassNotFoundException
- java学习之旅57、58--数组_StringBuilder和StringBuffer的使用_JDK源码分析内部机制、常用方法补充_常见面试题答法
- System.loadLibrary()是在使用Java的JNI机制时
- ubuntu中使用apt安装jdk后如何查找java的真实路径
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- java中使用反射机制获取实体类集合的某个属性值
- Android(java)学习笔记69:JDK5之后的Lock锁的概述和使用
- Java 查看jdk源码-查找源代码位置
- Java 正则使用一 之 多关键字查找
- 【视频】Java编程入门:JDK的安装、Eclipse编程环境的使用
- java学习-【转】使用Eclipse MAT查找内存泄漏工具介绍
- 普通Java程序员学习使用的6个JDK内建工具
- java初学者实践教程2-jdk的使用
- Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制
- 如何使用JDK及Linux工具查找进程中最忙的线程
- 使用Java8中Optional机制的正确姿势
- java的substring()方法在JDK 6和JDK 7中的运作机制
- Cocos2dx使用luaJavaBridge注意事项
- java JDK动态代理的机制
- java多线程设计wait、notify、notifyall、synchronized的使用机制