Linux平台和Windows平台下Web Service加载JNI dll的区别


Web Service是由Java编写,部署在Tomcat上。 Web Service调用JNI DLL之前,需要加载该DLL,在生成WAR包的java工程中,可以使用“System.load()” 来加载外部DLL,但是必须写全路径,这样不利于跨平台。也可以使用函数"System.loadLibrary()"来加载外部DLL,只需要写文件名(省略后缀名)。如果找不到库,就会弹出 异常UnsatisfiedLinkError  no ***  in java.library.path

System.loadLibrary()函数在windows和linux平台下对库的查找有区别。

在Windows平台下,供Web Service调用的JNI DLL 为"JNI_KindleService.dll" , 假设该DLL位于 d:\Test\目录下。在将“JNI_KindleService.dll" 拷贝到系统环境变量PATH下的任何一个目录下,或者将“d:\Test\”追加到PATH环境变量里,然后就可以使   System.loadLibrary("JNI_KindleService");    加载该DLL,JDK会依次在PATH环境变量设置的各个目录下,依次查找后缀名为.dll,且文件名为JNI_KindleService的库,直到找到为止。

如果在Linux平台下,该DLL名称为 "libJNI_KindleService.so", 位于/home/lib目录下,

仍然使用    System.loadLibrary("JNI_KindleService");     来加载该DLL

在Linux下,系统会将System.loadLibrary()传入的文件名参数,补上前缀"lib",后缀名".so",然后在环境变量LD_LIBRARY_PATH里面设置的路径里,依次查找文件  "libJNI_KindleService.so"  直到在某个目录下能找到该文件为止。

可以在/etc/profile 内使用

export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lib

来将该DLL所在目录添加查找库的环境变量上

使用source  /etc/profile 让该变量对当前的shell生效

可以使用

echo  $LD_LIBRARY_PATH

查看变量结果

相关内容