Re: gcj static crosscompiling raises issues with boehm-gc

David Daney <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
On 10/06/2010 07:25 AM, Andrew Haley wrote:
> On 10/06/2010 09:43 AM, Andreas Frisch wrote:
>> hi gcj experts,
>>
>> i've spent some time already trying to statically cross compile a java source
>> for an embedded mipsel architecture. i'm using openembedded and gcc-4.4.4 with
>> the latest java part imported from master
>>
>> in the makefile, i am using the command
>>
>> $(CROSS_COMPILE)gcj $(JFLAGS) $(SOURCES) \
>> 		-static-libgcj \
>> 		-fjni \
>> 		-g \
>> 		-o dumphd-mipsel-static \
>> 		 --main=dumphd.core.DumpHD \
>> 		-nostdlib \
>> 		-L/dream/oe1.6/dm8000/build/tmp/staging/mipsel-oe-linux/usr/lib \
>> 		-L/dream/projects/bluray/aacskeys-0.4.0c-mipsel/lib/linux/ \
>> 		-Wl,-rpath-link,/dream/oe1.6/dm8000/build/tmp/staging/mipsel-oe-
>> linux/usr/lib \
>> 		-Wl,-rpath-link,/dream/projects/bluray/aacskeys-0.4.0c-
>> mipsel/lib/linux/ -laacskeys \
>> 		-shared-libgcc -Wl,-non_shared -lgcj -Wl,-call_shared -lstdc++ -
>> Wl,--as-needed -lgcc_s -lpthread -lc -lm -ldl -lrt -Wl,--no-as-needed -Wl,-O1
>>
>> this may contain a lot of redundancies or look silly in many ways but for
>> right now i just aggregated as much as possible in there from what i could find
>> online.
>>
>> i've also set
>> CLASSPATH=/dream/oe1.6/dm8000/build/tmp/cross/mipsel/bin/ecj.jar:./
>>
>> when i run make, linking fails:
>>
>> /dream/oe1.6/dm8000/build/tmp/cross/mipsel/lib/gcc/mipsel-oe-
>> linux/4.4.4/../../../../mipsel-oe-linux/bin/ld: warning: cannot find entry
>> symbol __start; defaulting to 00000000004084b0
>> /dream/oe1.6/dm8000/build/tmp/cross/mipsel/lib/gcc/mipsel-oe-
>> linux/4.4.4/../../../../mipsel-oe-linux/lib/libgcj.a(dyn_load.o): In function
>> `GC_register_dynamic_libraries_dl_iterate_phdr':
>> /dream/oe1.6/dm8000/build/tmp/work/mipsel-oe-linux/gcc-cross-4.4.4-
>> r0.1/gcc-4.4.4/boehm-gc/dyn_load.c:454: undefined reference to `__data_start'
>> /dream/oe1.6/dm8000/build/tmp/cross/mipsel/lib/gcc/mipsel-oe-
>> linux/4.4.4/../../../../mipsel-oe-linux/lib/libgcj.a(os_dep.o): In function
>> `GC_register_data_segments':
>> /dream/oe1.6/dm8000/build/tmp/work/mipsel-oe-linux/gcc-cross-4.4.4-
>> r0.1/gcc-4.4.4/boehm-gc/os_dep.c:1450: undefined reference to `__data_start'
>> collect2: ld returned 1 exit status
>> make: *** [dumphd-static-new] Error 1
>>
>> i'd be grateful for any suggestions or hints.
>
> This looks completely broken: it seems to be trying to statically link
> against libgcj.  Try it without -non_shared.
>

To expound on this, the '-static-libgcj' option was created so that all 
the other things you have there would be unneeded.

I doubt you want any of: -shared-libgcc -Wl,-non_shared -lgcj 
-Wl,-call_shared -lstdc++ -Wl,--as-needed -lgcc_s -lpthread -lc -lm -ldl 
-lrt -Wl,--no-as-needed -Wl,-O1


Start off with -static-libgcj on a very simple 'hello-world' type 
program.  Then start adding all your other things in.

David Daney
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.