JEP 178 - working example?
Bob Vandette
bob.vandette at oracle.com
Tue May 28 16:06:17 PDT 2013
On May 28, 2013, at 7:06 AM, Steve Poole wrote:
>
> hi everyone,
>
> I've been reading JEP 178 (Statically-Linked JNI Libraries ) http://openjdk.java.net/jeps/178
>
> There is a sentence in the section on JNI Specification changes that says
>
> "A native library may be statically linked with the VM. The manner in which the library and VM image are combined is implementation-dependent."
>
> I can't find anything that explains the process in more detail so posting here.
>
> Basically - if I want to statically link my JNI library to Hotspot what are the instructions for the OpenJDK implementation?
Since the procedure for statically linking binaries into a executable is very platform specific, the specification
intentionally leaves out these details.
The key functional changes that were implemented to support this spec change, were:
1. Require JNI_OnLoad_{libraryname} for static libraries.
2. Modify the Java API's that load native JNI libraries to support static libraries by detecting the
presence of the library specific OnLoad function.
3. Support JNI_OnUnLoad_{libraryname}
So you can either build the entire JDK as static libraries, change every JNI_OnLoad function to be
unique and link them all together with a java launcher.
OR
You can create a single static library, making sure to give it a unique JNI_OnLoad_{libraryname}
entrypoint, link it with a program executable that loads the VM via the Java launcher or Invocation APIs.
For example: If your library name is speciallibrary.a, you would then call System.loadLibrary("speciallibrary")
Once the loadLibrary call succeeds, you can then call any native Java methods defined by the static library.
Bob.
>
>
> Cheers
>
> Steve
More information about the jdk8-dev
mailing list