java to native code and Sun JVM alternatives

Andrew Haley aph@redhat.com
Thu Mar 11 11:56:00 GMT 2010


On 03/11/2010 11:45 AM, wagde wrote:
>> I'm working on a project which have java code (and c++), and until ow I used
> javac to compile the code and java to run the classes and JNI to call java
> from c++ code.
>> I don't want to use javac, javah, and java, ...(sun stuff) because of
> royalties issues...

OpenJDK is free software, but let's press on...
> I'm looking for alternatives.
>> What I see right now are two alternatives:
> 1. compile my java code to native code using gcj, and link it with the c++
> code.
> 2. keep the classes and use the gij instead of java.
>> I start working on the two approaches in parallel and I'm having too many
> problems in both them. So I need some REAL help here.
>> Problem with 1.
> 1. I succeeded to compile my java code (after chaning the syntax) using gcj
> to linux "c" object files. But in the linkage to the binary, I got too many
> "undefined reference to", ... because I use external "jars" (like axis)
> which are not compiled to native. I try to compile the axis jar to c and get
> too many compilation errors.

Compiling Java code with -findirect-dispatch is probably your best
plan to solve this. When an undefined class is discoveed, gcj's
runtime will try to load its class files.
> Problem with 2.
> I compiled all my classes with gcj. and the C code uses JNI to call it. But
> the JNI creates a JVM (JNI_CreateJavaVM)!!! which I don't want to use.

Why not? This is fully supported by gcj, and doesn't hurt anything.
> I want to use gij instead. So I wanted to know if there is anyway to
> let my JNI code to ceate a gij VM and and java VM. is there anything
> like this ?! If not, how can I use the classes I compiled with gcj
> from the c code without using the JAVA VM? CNI? does that mean that
> I should convert my jni code to cni?

No, there's no need to do that. JNI code should work with gcj just
fine. 
Andrew.


More information about the Java mailing list

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