java.lang.UnsatisfiedLinkError: Unable to load library 'HCNetSDK': ÕҲ»µ½ָ¶¨

项目里面需要使用海康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匹配的问题


运行结果:


java.lang.UnsatisfiedLinkError: Unable to load library 'HCNetSDK': ÕҲ»µ½ָ¶¨_第1张图片


你可能感兴趣的:(IT技术相关)