ecj1 in cross-compile

Andrew Haley aph@redhat.com
Thu Aug 14 10:08:00 GMT 2008


Daniel Andrzejewski wrote:
> 
> 
> David Daney wrote:
>> Andrew Haley wrote:
>>> Matthijs van de Water wrote:
>>>
>>>   
>>>> I've got my GCC 4.3 toolchain working ok now, but for some reason I
>>>> fail to get an ecj1 binary.
>>>>
>>>> I'm cross-compiling for ARM and I've tried --with-ecj-jar=XXX (which
>>>> doesn't result in an ecj1) and also tried putting ecj.jar in my build
>>>> dir (which complains about a missing java compiler).
>>>> I must be doing something wrong, but I'm not sure what.
>>>>
>>>> I expect an i686 ecj1 binary to be compiled from the ecj-latest.jar
>>>> that I download in my build. Preferably standalone, like the Ubuntu
>>>> one.
>>>> The build machine doesn't have an i686 GCJ or JAVAC installed, is that
>>>> a problem?
>>>>
>>>> What am I missing?
>>>>     
>>> I don't know how you think this is going to work.  ecj1 is a Java program
>>> and thus it needs some sort of Java runtime library.  You are going to
>>> need
>>> an i686 gcj installed.  
>> That's right.  It is a new requirement for GCC-4.3 cross compilers.
>> Either install a native build of gcj/libgcj in your PATH, or as Andrew
>> suggested use the little shell script to invoke the jar file.
>>
>> You have to be careful though, if you may not always want a native
>> GCC-4.3 in your PATH, perhaps only when invoking the cross compiler.
>> You could just copy or link the native ecj1 to the cross compiler bin
>> directory.
>>
>> David Daney
>>
>>
>>
> 
> Hi,
> 
> I have successfully compiled gcc-4.3.0. I need to cross-compile java code to
> binary executables which wouldn't need shared libraries. So, I used options
> like 
> --disable-shared
> --enable-languages=java
> --with-ecj-jar=/home/daniel/ecj.jar
> 
> Now, when I try to compile a java program I get the following error:
> 
> ~> gcj --main=HelloWorld -o HelloWorld HelloWorld.java
> 
> Exception in thread "main" java.lang.NoClassDefFoundError:
> org.eclipse.jdt.internal.compiler.batch.GCCMain
>    at gnu.java.lang.MainThread.run(MainThread.java:102)
> Caused by: java.lang.ClassNotFoundException:
> org.eclipse.jdt.internal.compiler.batch.GCCMain not found in
> gnu.gcj.runtime.SystemClassLoader{urls=[file:./],
> parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
>    at java.net.URLClassLoader.findClass(URLClassLoader.java:529)
>    at java.lang.ClassLoader.loadClass(ClassLoader.java:442)
>    at java.lang.ClassLoader.loadClass(ClassLoader.java:377)
>    at gnu.java.lang.MainThread.run(MainThread.java:98)
> 
> 
> I cannot figure out what to fix. I tried to move the existing ecj1 file, and
> that's what I got:
> 
> ~> gcj --main=HelloWorld -o HelloWorld HelloWorld.java
> 
> gcj: error trying to exec 'ecj1': execvp: Permission denied
> 
> 
> It's understandable, I just renamed the ecj1 to something else.
> 
> Now, when I use a short bash script that is provided above, I get different
> error:
> 
> ~> gcj --main=HelloWorld -o HelloWorld HelloWorld.java
> 
> Exception in thread "main" java.lang.NoClassDefFoundError:
> org.eclipse.jdt.internal.compiler.batch.GCCMain
> *** Got java.lang.NullPointerException while trying to print stack trace.

My bash script is:

#!/bin/sh
gij -cp /home/aph/gcc/trunk/ecj.jar \
    org.eclipse.jdt.internal.compiler.batch.GCCMain \
    ${1+"$@"}

Andrew.



More information about the Java mailing list