compilation problems with ecj.jar

Marco Trudel mtrudel@gmx.ch
Wed Jan 17 12:06:00 GMT 2007


Michael Koch wrote:
> On Tue, Jan 16, 2007 at 11:54:52PM +0100, Marco Trudel wrote:
>> Andrew Haley wrote:
>>> Marco Trudel writes:
>>>> Andrew Haley wrote:
>>>>> The *real* cause is that, for some reason, gcj isn't being passed the
>>>>> correct path to libgcj.jar in the host system. Instead, this happens:
>>>>>>>>>> jc1 /mnt/zebedee/aph/gcc/trunk/libjava/.././libjava/../ecj.jar \
>>>>> -fhash-synchronization \
>>>>> -fno-use-divide-subroutine \
>>>>> -fuse-boehm-gc \
>>>>> -fnon-call-exceptions \
>>>>> -fkeep-inline-functions \
>>>>> -quiet \
>>>>> -dumpbase ecj.jar \
>>>>> -mtune=generic \
>>>>> -auxbase ecj \
>>>>> -g \
>>>>> -O2 \
>>>>> -version \
>>>>> -ffloat-store \
>>>>> -fomit-frame-pointer \
>>>>> -findirect-dispatch \
>>>>> -fbootclasspath=./:/tmp/prefix/share/java/libgcj-4.3.0.jar \
>>>>> -o /tmp/ccD80X4c.s
>>>>>>>>>> Note that the bootclasspath at this point is wrong: there's no
>>>>> libgcj.jar in the install dir yet. The first "./" item in the string
>>>>> is wrong because the .class files we need are no longer in the build
>>>>> dir: they're in the srcdir.
>>>>>>>>>> This oughta do it:
>>>>>>>>>> Index: Makefile.am
>>>>> ===================================================================
>>>>> --- Makefile.am	(revision 120638)
>>>>> +++ Makefile.am	(working copy)
>>>>> @@ -670,7 +670,7 @@
>>>>> ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) -Djava.class.path=$(ECJ_JAR)
>>>>> else !ENABLE_SHARED
>>>>> ## Use ecj.jar at compile time.
>>>>> -ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
>>>>> +ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR) 
>>> -fbootclasspath=$(BOOTCLASSPATH)
>>>>> endif !ENABLE_SHARED
>>>>>>>>>> ecjx_LDADD = -L$(here)/.libs libgcj.la
>>>>>>>>> No, still the same:
>>>> /home/Marco/Desktop/compile-lin-lin/gcc-build/gcc/gcj 
>>>>>>> -B/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libjava/ 
>>>> -B/home/Marco/Desktop/compile-lin-lin/gcc-build/gcc/ -ffloat-store > 
>>> -fomit-frame-pointer -g -O2 -o ecjx -findirect-dispatch > 
>>> --main=org.eclipse.jdt.internal.compiler.batch.GCCMain > 
>>> /usr/local/src/gcc/libjava/.././libjava/../ecj.jar > 
>>> -L/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libjava 
>>> -L/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libjava/.libs 
>>>> ./.libs/libgcj.a > 
>>> -L/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src 
>>> -L/home/Marco/Desktop/compile-lin-lin/gcc-build/i686-pc-linux-gnu/libstdc++-v3/src/.libs 
>>>> -lpthread -lrt -ldl > 
>>> -L/home/Marco/Desktop/compile-lin-lin/gcc-build/./gcc > 
>>> -L/home/Marco/Desktop/compile-lin-lin/gcc-XYZXYZ-lin/i686-pc-linux-gnu/bin 
>>> -L/home/Marco/Desktop/compile-lin-lin/gcc-XYZXYZ-lin/i686-pc-linux-gnu/lib 
>>>> -lgcc -lc -lgcc
>>>> gcj: Internal error: Segmentation fault (program jc1)
>>>> Please submit a full bug report.
>>>>>>>> Maybe I patched the wrong Makefile.am? I patched the one in the libjava 
>>>> dir...
>>> And you did run automake afterwards?
>> What is automake for? I tried to do a new gcj compilation. I assume that 
>> will automatically use the new Makefile.am.
>> No. You need automake to create Makefile.in from Makefile.am.
> Makefile.in is then used by configure to create Makefile.

Yes, thanks...
>>>> > > BTW,l there are more problems with compiling ecj.jar for
>>>> > > cross-compiling. Creating a host-linux, target-windows GCJ will
>>>> > > create a ecj.exe what is definitely the wrong thing to do.
>>>> >
>>>> > It's the right thing to do. You have to build the ecj.exe for
>>>> > GNU/Linux as a separate step when building the GNU/Linux native
>>>> > compiler. If you don't want ecj.exe for the target, don't include
>>>> > ecj.jar in the build tree.
>>>>>>>> What do I need a "exe" for on Linux?
>>> It's a Windows executable that compiles .java -> .class. If you're
>>> going to compile Java source on Windows, you'll need it.
>> But if I'd like to compile Java source on Windows, I would build a 
>> host=Windows target=Windows gcj. In my case, I have no use for ecj.exe 
>> since the a compilation happens on Linux.
>> So you want no javac compatible tool in your built GCJ? So you later
> dont want to be able to compile *.java to *.class?

Of course I want a compatible javac like tool for my build GCJ. That's 
the whole discussion. I don't get one. I won't be able to compile .java 
source unless I build a host=Linux and target=Linux GCJ. I get a javac 
like tool for Windows where I have no GCJ or anything else I could use 
the ecj.exe for...
>>> If you want to compile Java source on Linux, even if your target is
>>> Windows, you must build a Linux *native* compiler to get ecj.exe.
>> Isn't that somewhat senseless? If I only need a host=Linux 
>> target=Windows compiler, I also have to compile a host=Linux 
>> target=Linux gcj just to get my ecj and be able to compile .java source 
>> files on Linux?
>> But I get a ecj.exe for Windows that I don't need on Windows since my 
>> gcj only runs on Linux?
>> Where is the advantage of getting ecj for Windows? What could it be used 
>> for there? I'm sorry if I turn in circles, but I really don't see it. 
>> After all, I want to compile .java and .class files on Linux and deploy 
>> the created binary for Windows.
>>>>>>>> If I create a gcj with host=Linux and target=Windows, I'd assume
>>>> that I get a "ecj" binary for Linux that compiles for Windows.
>>> And you'd assume wrongly.
>> So you tell me :-) But I really don't understand it...
>>>>>> All other created binaries (gcc, gcj, objdump, ...) are also for
>>>> Linux and not exes.
>>> gcj-dbtool? grmic? gjar? etc. All for the target machine.
>> They compile for the target but run on the host. ecj.exe runs on target 
>> and compiles target-independent (I guess).
>>>>>>>> If I get a ecj.exe, what can I do with it? I wont be able to
>>>> compile .java files on Linux and its useless on Windows as far as I
>>>> can see. But I'd be glad to learn better...
>>> You need it for the Windows compiler.
>> Which Windows compiler? I have no Windows compiler if I build a 
>> host=Linux target=Windows gcj?!
>> The Java compiler to build *.class from *.java.

It seems I'm missing an obvious point or I'm talking about something 
else than you and Andrew... I need that java compiler that builds 
*.class files from *.java files for Linux, but I get one for Windows...
Anyway, I'll just take the one from my host=Linux target=Linux GCJ...
thanks anyway
Marco


More information about the Java mailing list

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