private synchronized void dynamicLoad(String s) throws IOException {
        try {
            System.out.println("Old library path: " + System.getProperty("java.library.path"));
            Field field = ClassLoader.class.getDeclaredField("usr_paths");
            field.setAccessible(true);
            String[] paths = (String[]) field.get(null);
            for (int i = 0; i < paths.length; i++) {
                if (s.equals(paths[i])) {
                    return;
                }
            }
            String[] tmp = new String[paths.length + 1];

            System.arraycopy(paths, 0, tmp, 0, paths.length);
            tmp[paths.length] = s;

            field.set(null, tmp);
            System.setProperty("java.library.path", System.getProperty("java.library.path").substring(0, System.getProperty("java.library.path").length() - 3) + File.pathSeparator + s + File.pathSeparator + File.pathSeparator + ".");
            System.out.println("Set new library path to: " + System.getProperty("java.library.path"));
        } catch (IllegalAccessException e) {
            throw new IOException("Failed to get permissions to set library path");
        } catch (NoSuchFieldException e) {
            throw new IOException("Failed to get field handle to set library path");
        }
    }