[Ecls-list] Need help compiling ECL 10.4.1 (32-bit) on Win7 64-bit via mingw32/msys

Paul Goins general at vultaire.net
Sun Oct 31 03:51:21 UTC 2010


I've looked into things a bit further here.  Perhaps now it's not
problems with ECL per se, but with compiling the Boehm GC.

 >  On Fri, Oct 29, 2010 at 12:48 PM, Paul Goins<general at vultaire.net>   wrote:
 >>  libeclmin.a(threads.o): In function `ecl_import_current_thread':
 >>  c:/Users/Vultaire/Desktop/pauls_stuff/ecl-10.4.1/src/c/threads.d:248:
 >>  undefined reference to `GC_register_my_thread'
 >>  libeclmin.a(threads.o): In function `mp_process_enable':
 >>  c:/Users/Vultaire/Desktop/pauls_stuff/ecl-10.4.1/src/c/threads.d:408:
 >>  undefined reference to `GC_CreateThread at 24'
 >>  libeclmin.a(threads.o): In function `ecl_release_current_thread':
 >>  c:/Users/Vultaire/Desktop/pauls_stuff/ecl-10.4.1/src/c/threads.d:280:
 >>  undefined reference to `GC_unregister_my_thread)

The above are all threading related symbols.  A straight "./configure"
on the Boehm GC build doesn't enable thread support.  Unfortunately,
"./configure --enable-threads=win32" also seems not to work; I can
compile, but the symbols are non-existant.


**For those who don't want to read the reset of this "log", my
   question is: has anyone got the Boehm GC compiled and working with
   ECL via MinGW, and if so, how exactly did you pull it off?**


More details:

The above symbols should be compiled into win32_threads.o, but nm
shows this:

--------------------------------------------------------------------
$ nm win32_threads.o
00000000 b .bss
00000000 d .data
00000000 N .debug_abbrev
00000000 N .debug_info
00000000 N .debug_line
00000000 N .debug_pubtypes
00000000 t .text
--------------------------------------------------------------------

I retried the compile, adding CPPFLAGS=-DWIN32_THREADS to the
configure step.  In this case, win32_threads.o seems to turn out
alright:

--------------------------------------------------------------------
$ nm win32_threads.o | grep -e "GC_CreateThread" -e "GC_register_my_thread" -e "GC_unregister_my_thread"
00000ec8 T _GC_CreateThread at 24
0000039c T _GC_register_my_thread
000000d8 T _GC_register_my_thread_inner
0000045c T _GC_unregister_my_thread
--------------------------------------------------------------------

So, it looks like I've got the needed symbols for ECL now.  But, now
the Boehm compile doesn't finish (at which point I should probably be
switching this discussion to a different ML...):

--------------------------------------------------------------------
/bin/sh ./libtool --tag=CC   --mode=link gcc -fexceptions -g -O2  -version-info 1:3:0 -no-undefined  -o libgc.la -rpath /usr/local/lib allchblk.lo alloc.lo blacklst.lo checksums.lo dbg_mlc.lo dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo headers.lo malloc.lo mallocx.lo mark.lo mark_rts.lo misc.lo new_hblk.lo obj_map.lo os_dep.lo pcr_interface.lo ptr_chck.lo real_malloc.lo reclaim.lo specific.lo stubborn.lo typd_mlc.lo backgraph.lo thread_local_alloc.lo   win32_threads.lo atomic_ops.lo mach_dep.lo
libtool: link: gcc -shared  .libs/allchblk.o .libs/alloc.o .libs/blacklst.o .libs/checksums.o .libs/dbg_mlc.o .libs/dyn_load.o .libs/finalize.o .libs/gc_dlopen.o .libs/gcj_mlc.o .libs/headers.o .libs/malloc.o .libs/mallocx.o .libs/mark.o .libs/mark_rts.o .libs/misc.o .libs/new_hblk.o .libs/obj_map.o .libs/os_dep.o .libs/pcr_interface.o .libs/ptr_chck.o .libs/real_malloc.o .libs/reclaim.o .libs/specific.o .libs/stubborn.o .libs/typd_mlc.o .libs/backgraph.o .libs/thread_local_alloc.o 
.libs/win32_threads.o .libs/atomic_ops.o .libs/mach_dep.o -o .libs/libgc-1.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libgc.dll.a
Creating library file: .libs/libgc.dll.a
.libs/win32_threads.o: In function `GC_check_finalizer_nested':
c:\Users\Vultaire\bdwgc/win32_threads.c:562: multiple definition of `GC_check_finalizer_nested'
.libs/finalize.o:c:\Users\Vultaire\bdwgc/finalize.c:510: first defined here
.libs/win32_threads.o: In function `GC_do_blocking_inner':
c:\Users\Vultaire\bdwgc/win32_threads.c:769: multiple definition of `GC_do_blocking_inner'
.libs/misc.o:c:\Users\Vultaire\bdwgc/misc.c:1541: first defined here
.libs/win32_threads.o: In function `GC_call_with_gc_active':
c:\Users\Vultaire\bdwgc/win32_threads.c:799: multiple definition of `GC_call_with_gc_active'
.libs/misc.o:c:\Users\Vultaire\bdwgc/misc.c:1496: first defined here
.libs/ptr_chck.o: In function `GC_is_visible':
c:\Users\Vultaire\bdwgc/ptr_chck.c:206: undefined reference to `GC_is_static_root'
c:\Users\Vultaire\bdwgc/ptr_chck.c:211: undefined reference to `GC_is_static_root'
.libs/win32_threads.o:win32_threads.c:(.text+0x7d8): undefined reference to `GC_write_cs'
.libs/win32_threads.o:win32_threads.c:(.text+0x828): undefined reference to `GC_write_cs'
collect2: ld returned 1 exit status
make[1]: *** [libgc.la] Error 1
make[1]: Leaving directory `/c/Users/Vultaire/bdwgc'
make: *** [all-recursive] Error 1
--------------------------------------------------------------------

Anyway, that's as far as I've gotten so far.

- Paul




More information about the ecl-devel mailing list