Welcome 微信登录

首页 / 操作系统 / Linux / 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.pathSystem.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查看变量结果