Ich beziehe mich mal auf fogenden Thread Byte-Welt - Projekte / Projects - Byte-Welt - Die Welt des Programmierens
und folgenden Text von @Marco13
After dozens of reports of „UnsatisfiedLinkErrors“, this issue finally seemed to be resolved by packing the natives into the JAR and managing them completely transparently for the user.
Was habe ich:
Opencv 3.0.0 mit Java-Bindings auf einem Linux System sind gebaut. Dabei kamen ein Jar-File und ein libopencv_java300.so heraus.
Daraus habe ich dann zwei Jars gebaut und ins lokale maven-repository installiert.
Bin nach dieser Anleitung vorgegangen Introduction to OpenCV Development with Clojure — OpenCV 2.4.11.0 documentation
Diese bezieht sich zwar auf clojure und leiningen, aber installiert Javaprojekte genauso zuverlässig in ein maven-repo. Das hat also soweit geklappt.
Wenn ich die Jars nun in einem Projekt einbinde, dann müsste ich ja eigentlich alles zur Verfügung haben, was ich brauche.
Das einzige Problem, dass ich nun noch habe ist, das Laden der libopencv_java300.so
Packe ich die Datei libopencv_300.so irgendwo hin und setze den java.library.path auf das beinhaltende Verzeichnis dann funktioniert das ganze und ich kann die lib mit System.loadLibrary("opencv_java300");
laden und das ganze verwenden.
Was ich allerdings gerne hätte, ist dass ich ein einziges jar habe und dieses per Doppelklick ausführen kann.
Und jetzt habe ich das Problem, dass ich diese lib nicht referenzieren kann, wenn sie in einer jar steckt.
Mit clojure hingegen, kann ich die maven-dependencies referenzieren und dann in einer REPL das ganze mit (clojure.lang.RT/loadLibrary org.opencv.core.Core/NATIVE_LIBRARY_NAME)
laden und verwenden. Aber da ist eh noch etwas mehr „Magie“ im Spiel. Der Name verweist auf das Verzeichnis target/native/linux/x86_64. Scheint also kein ganz unmögliches unterfangen zu sein.
Und die Frage die sich mir stellt ist, wie du @Marco13 das ganz transparent für den User mit der JOCL löst. Bzw. was sich hier als Best-Practice erweist.
Eine Idee die mir vorschwebt ist die so-Datei beim Start nach temp zu kopieren und von dort zu laden.