summaryrefslogtreecommitdiffstats
path: root/make/dynlink-unix-CustomJavaCode.java
diff options
context:
space:
mode:
Diffstat (limited to 'make/dynlink-unix-CustomJavaCode.java')
-rwxr-xr-xmake/dynlink-unix-CustomJavaCode.java18
1 files changed, 18 insertions, 0 deletions
diff --git a/make/dynlink-unix-CustomJavaCode.java b/make/dynlink-unix-CustomJavaCode.java
new file mode 100755
index 0000000..5d10edf
--- /dev/null
+++ b/make/dynlink-unix-CustomJavaCode.java
@@ -0,0 +1,18 @@
+public long openLibrary(String pathname) {
+ // Note we use RTLD_GLOBAL visibility to allow this functionality to
+ // be used to pre-resolve dependent libraries of JNI code without
+ // requiring that all references to symbols in those libraries be
+ // looked up dynamically via the ProcAddressTable mechanism; in
+ // other words, one can actually link against the library instead of
+ // having to dlsym all entry points. System.loadLibrary() uses
+ // RTLD_LOCAL visibility so can't be used for this purpose.
+ return dlopen(pathname, RTLD_LAZY | RTLD_GLOBAL);
+}
+
+public long lookupSymbol(long libraryHandle, String symbolName) {
+ return dlsym(libraryHandle, symbolName);
+}
+
+public void closeLibrary(long libraryHandle) {
+ dlclose(libraryHandle);
+}