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
>
>
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.