Как упаковать opencv + java в банку

Я использовал Opencv 2.4.5 с Java в течение некоторого времени, создавая приложение, и теперь хотел бы распространять приложение. Библиотека загружается следующим образом:

static{ System.loadLibrary("opencv_java245"); } 

который отлично работает. Однако при экспорте он не работает при работе с банкой:

 java -jar build1.jar 

Файл opencv_java245.jar включен как пользовательская библиотека, к которому подключен родной файл (libopencv_java245.dylib). При запуске исполняемого банку, сгенерированного из Eclipse, я получаю UnsatisfiedLinkError ниже, несмотря на то, что компиляция / работа выполняется отлично в eclipse.

 Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java245 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) at java.lang.Runtime.loadLibrary0(Runtime.java:845) at java.lang.System.loadLibrary(System.java:1084) at com.drawbridge.Main.(Main.java:12) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:266) at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56) 

Кто-нибудь знает простой способ упаковки OpenCV в банку?

Обновление: теперь я исчерпал все. Я могу добавить библиотеку в мой путь сборки (а не использовать System.loadLibrary) и работает в eclipse, но не при упаковке в банке. Я все пробовал. Я также проверил тип динамической библиотеки, которую я пытаюсь загрузить – это

 Mach-O 64-bit x86_64 dynamically linked shared library 

который, похоже, должен работать нормально. Я использовал -D64 и -D32 для тестирования и получения одинакового результата с обоими.

Как сказал Стивен С, это было так же, как в Extract и загрузить DLL из JAR, а также в отчет об ошибке . Я был немного не осведомлен о том, как использовать dylib и пытался быть совместимым с учебником OpenCV, в котором использовалась «пользовательская библиотека», чтобы добавить банку, а затем добавить родной dylib. Кроме того, по какой-то причине загрузка ресурсов даже при использовании «/» загружалась из каталога src, а не в корневой каталог моего проекта (что было в случае тестового проекта, который я сделал).

Для тех, кто пытается сделать то же самое, вот несколько кодов, которые помогут:

 private static void loadLibrary() { try { InputStream in = null; File fileOut = null; String osName = System.getProperty("os.name"); Utils.out.println(Main.class, osName); if(osName.startsWith("Windows")){ int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model")); if(bitness == 32){ Utils.out.println(Main.class, "32 bit detected"); in = Main.class.getResourceAsStream("/opencv/x86/opencv_java245.dll"); fileOut = File.createTempFile("lib", ".dll"); } else if (bitness == 64){ Utils.out.println(Main.class, "64 bit detected"); in = Main.class.getResourceAsStream("/opencv/x64/opencv_java245.dll"); fileOut = File.createTempFile("lib", ".dll"); } else{ Utils.out.println(Main.class, "Unknown bit detected - trying with 32 bit"); in = Main.class.getResourceAsStream("/opencv/x86/opencv_java245.dll"); fileOut = File.createTempFile("lib", ".dll"); } } else if(osName.equals("Mac OS X")){ in = Main.class.getResourceAsStream("/opencv/mac/libopencv_java245.dylib"); fileOut = File.createTempFile("lib", ".dylib"); } OutputStream out = FileUtils.openOutputStream(fileOut); IOUtils.copy(in, out); in.close(); out.close(); System.load(fileOut.toString()); } catch (Exception e) { throw new RuntimeException("Failed to load opencv native library", e); }