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

David Daney ddaney.cavm@gmail.com
Mon Feb 13 18:33:00 GMT 2012


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<qinsoon@gmail.com> 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
>>


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /