Re: Interface gcj-compiled library with Java programs in a runtime (other than gij)?
David Daney <[email protected]>
| Newsgroups | gmane.comp.gcc.java.devel |
|---|---|
| Message-ID | <[email protected]> |
On 02/12/2012 08:31 PM, Yi Lin wrote:
> Thank you. I think I may have missed a keyword here: CNI. I avoid using
> JNI for performance degradation.
>
> The detailed scenario is like:
> There are two parts of code.
>
> -SomeJavaCode.java: containing a method call to NativeJavaLib.a().
> This part of code remains in bytecode
So really what you are talking about is SomeJavaCode.class running the
the libgcj interpreter.
I am just going from memory here, but I think that the interpreter can
only call native code via JNI.
For compiled code, CNI may be faster. So...
>
> -NativeJavaLib.java: declaring 'native void a()'
... rename this bit like this:
private native void _a();
/* 'Trampoline' to native code. */
void a()
{
_a();
}
> -NativeJavaLib.cpp: implementing a() via CNI
In here rename a() to _a().
> This part is compiled to libJavaLib.so
>
Now you have not changed SomeJavaCode.java in any way, but it is instead
calling a normal java method in the NativeJavaLib.java, which takes care
of doing the proper CNI calling.
> Now SomeJavaCode can be executed correctly with 'gij' interpreter; I
> think there is no JNI involved. But it cannot run on HotSpot or other
> VM. If I have to use JNI to do this, then the approach is much less
> attractive.
>
> Thanks,
> Yi
>
> On 13/02/12 15:00 , Brian Jones wrote:
>> I suggest you try jni to get to whatever native code you are
>> interested in.
>>
>> Brian
>>
>> On Feb 12, 2012, at 10:01 PM, Yi Lin<[email protected]> wrote:
>>
>>> Hi,
>>>
>>> I am wondering if we can use methods from a gcj-compiled library in
>>> uncompiled Java program(bytecode) executed on a VM.
>>>
>>> According to gcj FAQ 1.7, there is no problem to do this with 'gij'
>>> interpreter/runtime. You can compile some Java code into library
>>> (native code), and run bytecode with 'gij' to invoke library methods.
>>> But this seems only capable for 'gij', and other runtimes like
>>> HotSpot cannot load and link the library properly.
>>>
>>> I want to know if there is a general solution to allow you interface
>>> uncompiled Java program with gcj-compiled library. Any information or
>>> reference about this will be appreciated.
>>>
>>> Many Thanks,
>>> Yi
>
>