TO szxbluestar(蓝色星光): 放在system32下面确实可以解决问题。但是不应该放在system32下面。因为你的DLL动态链接库是属于你的应用程序的,而不应该属于系统。发布的时候应该一起发布,说明配置的方法,而不是简单地放在system32中了事。要是所有发布的软件都这样做,那么system32早就变成垃圾堆了。 :) 其实很简单,把DLL放在%PATH%路径之下就可以搞定了。
呵呵,不用再加分了。看了你的短消息,具体如何部署还是得你依照实际环境来确定。 俺在这里大致讲一下JVM如何加载动态链接库/共享目标文件的东东。希望你可以根据这些来决定你如何部署。(俺个人认为DLL不应该放在WAR中的) 在java.lang.System中有这么一个方法: << public static void loadLibrary(String libname) >> 这个方法的作用就是根据指定的库名称加载系统库。(你如果使用了JNI,会自动被调用,而不需要你显示调用)。来看看其JAVADOC怎么说?“Loads the system library specified by the libname argument. The manner in which a library name is mapped to the actual system library is system dependent.” 可以看到,如何加载系统库的行为是与具体的系统相关的。 你现在需要的是加载WIN32平台的DLL库,那么就看看DLL库如何加载呢?只要这个DLL库位于PATH路径中即可。「为什么system32下面可以?因为%WINDIR%\system32就在PATH中」。所以在你部署的时候只要保证你的DLL在PATH中。 在很多UNIX平台,共享目标文件的命名是“lib<库名>.so”,如果说需要 HelloJni 库,那么需要的文件是 libHelloJni.so ,在UNIX下不需要设置PATH来使用so, 而是保证so在LD_LIBRARY_PATH中即可。
回答过的来接分啊,哈哈,大家开心啊
放在system32下面确实可以解决问题。但是不应该放在system32下面。因为你的DLL动态链接库是属于你的应用程序的,而不应该属于系统。发布的时候应该一起发布,说明配置的方法,而不是简单地放在system32中了事。要是所有发布的软件都这样做,那么system32早就变成垃圾堆了。
:)
其实很简单,把DLL放在%PATH%路径之下就可以搞定了。
俺在这里大致讲一下JVM如何加载动态链接库/共享目标文件的东东。希望你可以根据这些来决定你如何部署。(俺个人认为DLL不应该放在WAR中的)
在java.lang.System中有这么一个方法:
<<
public static void loadLibrary(String libname)
>>
这个方法的作用就是根据指定的库名称加载系统库。(你如果使用了JNI,会自动被调用,而不需要你显示调用)。来看看其JAVADOC怎么说?“Loads the system library specified by the libname argument. The manner in which a library name is mapped to the actual system library is system dependent.”
可以看到,如何加载系统库的行为是与具体的系统相关的。
你现在需要的是加载WIN32平台的DLL库,那么就看看DLL库如何加载呢?只要这个DLL库位于PATH路径中即可。「为什么system32下面可以?因为%WINDIR%\system32就在PATH中」。所以在你部署的时候只要保证你的DLL在PATH中。
在很多UNIX平台,共享目标文件的命名是“lib<库名>.so”,如果说需要 HelloJni 库,那么需要的文件是 libHelloJni.so ,在UNIX下不需要设置PATH来使用so, 而是保证so在LD_LIBRARY_PATH中即可。
我已经测试通过了啊,效果不错哦。