From 8d6a73b2c7332f00dfce0d84efdf7e90dcec2cc6 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Thu, 11 Jun 2015 11:44:56 +0200 Subject: [PATCH] Java should prefer the bundled version of native libs Using the bundled version removes any versionning problem for the simgrid_full.jar. This fixes #9 on github. --- src/bindings/java/org/simgrid/NativeLib.java | 35 ++++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/bindings/java/org/simgrid/NativeLib.java b/src/bindings/java/org/simgrid/NativeLib.java index d253847398..82c5c12e3f 100644 --- a/src/bindings/java/org/simgrid/NativeLib.java +++ b/src/bindings/java/org/simgrid/NativeLib.java @@ -36,15 +36,22 @@ public final class NativeLib { } public static void nativeInit(String name) { try { - /* prefer the version on disk, if existing */ - System.loadLibrary(name); - } catch (UnsatisfiedLinkError e) { - /* If not found, unpack the one bundled into the jar file and use it */ + /* Prefer the version of the library bundled into the jar file and use it */ loadLib(name); + } catch (SimGridLibNotFoundException e) { + /* If not found, try to see if we can find a version on disk */ + try { + System.loadLibrary(name); + } catch (UnsatisfiedLinkError e2) { + System.err.println("Cannot load the bindings to the "+name+" library in path "+getPath()); + e.printStackTrace(); + System.err.println("This jar file does not seem to fit your system, and I cannot find an installation of SimGrid."); + System.exit(1); + } } } - private static void loadLib (String name) { + private static void loadLib (String name) throws SimGridLibNotFoundException { String Path = NativeLib.getPath(); String filename=name; @@ -67,7 +74,7 @@ public final class NativeLib { in = NativeLib.class.getClassLoader().getResourceAsStream(Path+filename); } if (in == null) { - throw new RuntimeException("Cannot find library "+name+" in path "+Path+". Sorry, but this jar does not seem to be usable on your machine."); + throw new SimGridLibNotFoundException("Cannot find library "+name+" in path "+Path+". Sorry, but this jar does not seem to be usable on your machine."); } try { // We must write the lib onto the disk before loading it -- stupid operating systems @@ -89,10 +96,7 @@ public final class NativeLib { System.load(fileOut.getAbsolutePath()); } catch (Exception e) { - System.err.println("Cannot load the bindings to the "+name+" library in path "+getPath()); - e.printStackTrace(); - System.err.println("This jar file does not seem to fit your system, sorry"); - System.exit(1); + throw new SimGridLibNotFoundException("Cannot load the bindings to the "+name+" library in path "+getPath(), e); } } @@ -121,3 +125,14 @@ public final class NativeLib { System.out.println("This java library will try to load the native code under the following name:\n" +getPath()); } } + +class SimGridLibNotFoundException extends Exception { + private static final long serialVersionUID = 1L; + public SimGridLibNotFoundException(String msg) { + super(msg); + } + + public SimGridLibNotFoundException(String msg, Exception e) { + super(msg,e); + } +} \ No newline at end of file -- 2.20.1