[ImageJ-devel] imagej-loader / dlopen args
Johannes Schindelin
johannes.schindelin at gmx.de
Wed Mar 18 14:32:23 CDT 2015
Hi Lee,
On 2015-03-18 14:47, Lee Kamentsky wrote:
> I'm programming "monkey see, monkey do" style. I have very little idea
> what
> I'm doing, trying to replicate the logic for mac loading dylibs in
> imagej-loader.
>
> I've gotten pretty far, but at the end, I'm seeing the error,
> "JavaNativeFoundation: GetGlobalVM: JNI_GetCreatedJavaVMs() failed to
> get
> any VM" when I start an AWT app.
Do you expect a JVM to be running already? If not, you should [create
one](https://github.com/imagej/imagej-launcher/blob/3e061521a/src/main/c/ImageJ.c#L307-L322).
> I am guessing that this is why you dlopened libjli here
> <https://github.com/imagej/imagej-launcher/blob/master/src/main/c/ImageJ.c#L264>.
Heh, I have to admit that I did not remember at all why I did that.
Happily, even I learned to write kick-ass commit messages, and I also
learned the awesomeness of the `Blame` button on GitHub:
https://github.com/imagej/imagej-launcher/blame/master/src/main/c/ImageJ.c#L264
(I vaguely remember writing that commit message after spending something
between twenty and thirty super-focused hours on hunting down this bug,
that was not really fun, that one hunt).
> I do the same, but (so far) with Python's ctypes.CDLL. That doesn't let
> you
> specify RTLD_LAZY as a dlopen mode. So, I think that's the big
> difference
> between how you do things and how I do them. My first question is
> whether
> RTLD_LAZY is needed as the mode. My second question is why you needed
> to
> load libjli.dylib in the first place and, if you might grant me a third
> wish, my third question is whether you've seen this error before.
The JLI library is only needed for forward compatibility, so that MacOSX
does not annoy the user by a "Do you want to install Java 6?" popup.
And yes, I have seen an error like that before, but only when trying to
attach to a running JVM from within Matlab (Matlab's very own GUI is
written in Java... so there is already a JVM running in a Matlab
instance although it is a bit tricky to get at it under certain
circumstances, but it is impossible to run two Oracle JVMs in the same
process in any case).
> Thanks in advance, Mr. Wizard.
Sorry, oh ye mighty Python God, I fear my input was not really helpful
to your cause. But maybe you have a project for me to clone, with
instructions that might let this poor Python pilgrim reproduce the
issue?
Ciao,
Dscho
More information about the ImageJ-devel
mailing list