代码改变世界

从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呢?.. 不要在意这些细节...