您的位置:首页 > 编程语言 > Lua

从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的啊,为什么会找不到呢?

继续深入,结果发现在

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呢?.. 不要在意这些细节...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: