-findirect-dispatch: broken on Linux, working on Mingw?

Andrew Haley aph@redhat.com
Fri Mar 9 12:45:00 GMT 2007


Marco Trudel writes:
 > Andrew Haley wrote:
 > > Marco Trudel writes:
 > > > Is there a better way to solve this problem?
 > > 
 > > Yes, but you know already. Indirect dispatch and shared libraries is
 > > the right answer to this problem.
 > 
 > > > Maybe it was intentionally but broken in the mean time?
 > > > Or maybe the linker changed? I think I updated binutils for 4.3...
 > > > 
 > > > > However, if you really do want to do this weird thing, this link line
 > > > > in install/lib/libgcj.spec might work after a fashion:
 > > > > 
 > > > > *lib: %{static-libgcj:-non_shared -lgcj -call_shared;:%{s-bc-abi:-lgcj_bc;:-lgcj}} -lm -lpthread -lrt -ldl %(libgcc) %(liborig)
 > > > 
 > > > No, that doesn't fix it.
 > > 
 > > I tried it, and it works for me on GNU/Linux. We need the output
 > > using "gcj -v" to know why it failed in your case.
 > 
 > Attached:
 > newLib.txt: Compilation output with your *lib: ... line.
 > oldLib.txt: Compilation output with the original *lib: ... line.
 > 
 > I should mention that I work on 32bit Windows with a static GCJ rev 
 > 122233. The libgcj.spec is used, I removed the *lib line and got another 
 > error.
Here's your newLib.txt link line:
 c:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../libexec/gcc/i686-pc-linux-gnu/4.3.0/collect2.exe -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 c:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../sys-root/usr/lib/crt1.o c:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../sys-root/usr/lib/crti.o c:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../lib/gcc/i686-pc-linux-gnu/4.3.0/crtbegin.o -Lc:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../lib/gcc/i686-pc-linux-gnu/4.3.0 -Lc:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../lib/gcc -Lc:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../lib/gcc/i686-pc-linux-gnu/4.3.0/../../../../i686-pc-linux-gnu/lib -Lc:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../sys-root/lib -Lc:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../sys-root/usr/lib C:\DOKUME~1\Marco\LOKALE~1\Temp/cckldaaa.o C:\DOKUME~1\Marco\LOKALE~1\Temp/ccKKbaaa.o -lgcc -lgcj_bc -lm -lpthread -lrt -ldl -lgcc -lc -lgcc c:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../lib/gcc/i686-pc-linux-gnu/4.3.0/crtend.o c:/programme/javanativecompiler-1.1.1/gcc-122233-lin/bin/../sys-root/usr/lib/crtn.o
Notice this fragment:
-lgcc -lgcj_bc -lm
shouldn't be there. -lgcj_bc should only be linked when linking
dynamically. It should be 
-lgcc -lgcj -lm
I guess my fix doesn't work on Windows becasue you don't use the
static-libgcj command, so it assumes dynamic linking. I suppose for a
staticonly build you really need
*lib: -lgcj -lm -lpthread -lrt -ldl %(libgcc) %(liborig)
Andrew.


More information about the Java mailing list

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