Re: Interface gcj-compiled library with Java programs in a runtime (other than gij)?

Bryce McKinlay <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <CALUNu-o7UfQb9a7GSNTPwHyJd3VCMXMsDKwLGtKyzYuNWYBkHQ@mail.gmail.com>
On Tue, Feb 14, 2012 at 11:26 AM, Yi Lin <[email protected]> wrote:
>
> Thank you all for the answers. I think I have some clue about CNI/JNI on the interface.
>
> But I still have doubt about how a shared library compiled from Java can be used by a) c/c++, b) Java code running on other JVM (not libgcj interpreter). I think b) is straightforwad if a) is possible.
>
> So for a), is calling a shared library of compiled java code any different than calling a shared library from normal c/c++ code? I have been spending two days exploring this and trying different approaches. My expectation is to load the compiled Java lib and use its method via dlopen, dlsym, etc. I guess another possibility is to use JvCreateVM(), and do everything in Java fashion. I don't have any success in either yet. Any hint would be very helpful so I could stop wasting time on a wrong track.


a) is certainly possible, using either JNI or CNI. Whichever one you
use, you need to call a couple of functions to initialize the Java VM
before you start calling your Java classes. You just need to make sure
libgcj gets loaded somehow, either using -lgcj or dlopen.
See here for a CNI example:
http://gcc.gnu.org/onlinedocs/gcj/Invocation.html#Invocation

b) "Should" work, but maybe you'd get conflicts with things like
signal handlers since you effectively have 2 Java runtimes running in
the same process.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.