项目里面需要使用海康sdk,各种参考网上的文章,就是搞不定,反复报错
java.lang.UnsatisfiedLinkError: Unable to load library 'HCNetSDK': ÕҲ»µ½ָ¶¨
解决方案就两个:要么把海康的dll文件及sdk子目录复制到jdk的bin目录里面解决,要么就是写死路径解决,如
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("d:\\lib\\HCNetSDK", HCNetSDK.class);上面两种方法都可以解决,但是项目部署后还要建立目录或者复制文件太麻烦,就没法和项目文件一起发布么?答案是可以的,这么解决:
先写个类文件,然后在类文件的静态初始化块里面取路径
public class ClientDemo { public static String DLL_PATH; static{ String path=(ClientDemo.class.getResource("/").getPath()).replaceAll("%20", " ").substring(1).replace("/", "\\"); try { DLL_PATH= java.net.URLDecoder.decode(path,"utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }
然后这么引用一下就可以了:
public interface HCNetSDK extends StdCallLibrary { HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(ClientDemo.DLL_PATH+"HCNetSDK.dll", HCNetSDK.class);
NND,搞了我三个小时,里面有getResource返回路径有%20的jdk历史遗留bug,有需要做utf-8转码的坑,有32位jdk或者64位jdk需要和海康dll匹配的问题
运行结果: