This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: ecj1 in cross-compile
- From: Andrew Haley <aph at redhat dot com>
- To: Daniel Andrzejewski <mastadan at o2 dot pl>
- Cc: java at gcc dot gnu dot org
- Date: Thu, 14 Aug 2008 15:41:20 +0100
- Subject: Re: ecj1 in cross-compile
- References: <35a670560806110037g7c4c2909r741bde17de9baedc@mail.gmail.com> <484F8E26.2070203@redhat.com> <484FFE0A.8030501@avtrex.com> <18970983.post@talk.nabble.com> <48A403E9.10006@redhat.com> <18982303.post@talk.nabble.com>
Daniel Andrzejewski wrote:
>
>
> Andrew Haley wrote:
>> 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.
>>
>>
>
> So, I used your script, just made an adjustment to the path to ecj.jar file,
> and as I mentioned earlier, I got this error:
>
> Exception in thread "main" java.lang.NoClassDefFoundError:
> org.eclipse.jdt.internal.compiler.batch.GCCMain
> *** Got java.lang.NullPointerException while trying to print stack trace.
>
> What should I fix? I seem to get stuck.
In your gcc 4.3 build directory, type:
make check-target-libjava
Andrew.