从Luajava的使用看jdk的LoadLibrary查找机制
2014-01-14 20:48 G.N.O 阅读(314) 评论(0) 编辑 收藏 举报我这是双系统,一个win7-32bit,一个win7-64bit
同一个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呢?.. 不要在意这些细节...