Hi Kartik,
Yhc does indeed work on (fully) 64-bit platforms but apparently not on
32-bit distros running on 64-bit kernels.
We suspect the problem is that the architecture detects x86_64 (from the
kernel) and then builds for that. But then nothing links because you
don't have the 64bit development libraries. This is why your uname hack
works, it makes the build script think you're running an x86 kernel.
In the long run you're probably better off sticking with either both
64bit kernel and distro or both 32bit. I suspect you'll get a lot of
trouble trying to build almost anything with a 'mixed' system. It's also
worth remembering 64bit is still quite capable of running 32bit
applications in Ubuntu (I run 64-bit ubuntu).
Anyhow, I've asked Andrew to add an option to the build to force the
architecture. When that's done you should be able to repull the source
and try rebuilding with:
scons arch=x86
Hope that helps.
Tom
Kartik Vaddadi wrote:
Hello,
I have a 32-bit distro (Kubuntu 6.10) running on a 64-bit kernel. The yhc
build fails with 'undefined reference' errors.
scons: Reading SConscript files ...
Checking for architecture... x86_64
Checking for operating system... linux2
Bootstrapping...
Done.
scons: done reading SConscript files.
scons: Building targets ...
gcc -o inst/bin/yhi src/runtime/BCKernel/sanity.o
src/runtime/BCKernel/info.o src/runtime/BCKernel/iofuncs.o
src/runtime/BCKernel/external.o src/runtime/BCKernel/profile.o
src/runtime/BCKernel/integer.o src/runtime/BCKernel/hsffi.o
src/runtime/BCKernel/foreign.o src/runtime/BCKernel/jonkers.o
src/runtime/BCKernel/mutator.o src/runtime/BCKernel/process.o
src/runtime/BCKernel/stable.o src/runtime/BCKernel/module.o
src/runtime/BCKernel/primitive.o src/runtime/BCKernel/main.o
src/runtime/BCKernel/hashtable.o src/runtime/BCKernel/pretty.o
src/runtime/BCKernel/thread.o src/runtime/BCKernel/stopcopy.o
src/runtime/BCKernel/make.o src/runtime/BCKernel/mark.o
src/runtime/BCKernel/heap.o src/runtime/BCKernel/builtin/Array.o
src/runtime/BCKernel/builtin/IO.o src/runtime/BCKernel/builtin/Prelude.o
src/runtime/BCKernel/builtin/FFI.o
src/runtime/BCKernel/builtin/RuntimeAPI.o
src/runtime/BCKernel/builtin/Concurrent.o
src/runtime/BCKernel/builtin/System.o
src/runtime/BCKernel/builtin/PackedString.o
depends/ctypes/libffi/src/prep_cif.o depends/ctypes/libffi/src/cfield.o
depends/ctypes/libffi/src/x86/ffi64.o
depends/ctypes/libffi/src/x86/unix64.o depends/ctypes/libffi/src/x86/sysv.o
-L/usr/local/lib -lgmp -lm -lpthread -ldl src/runtime/BCKernel/hsffi.o: In
function `hsffi_call':hsffi.c:(.text+0x3a1): undefined reference to
`ffi_call' src/runtime/BCKernel/hsffi.o: In function
`hsffi_evalContext':hsffi.c:(.text+0x439): undefined reference to
`ffi_call' depends/ctypes/libffi/src/prep_cif.o: In function
`ffi_prep_cif':prep_cif.c:(.text+0x20c): undefined reference to
`ffi_prep_cif_machdep' depends/ctypes/libffi/src/x86/sysv.o: In function
`ffi_closure_SYSV':depends/ctypes/libffi/src/x86/sysv.S:(.text+0x8a):
undefined reference to `ffi_closure_SYSV_inner' collect2: ld returned 1
exit status
scons: *** [inst/bin/yhi] Error 1
scons: building terminated because of errors.
I replaced uname (in /bin) with a version that prints "i386" for the
architecture rather than "x86_64", and the build succeeds, with warnings
(some ffi-related).
But I'm not sure if my uname hack is a good idea (could it break builds of
other software?)
Does yhc support 64-bit architectures? And since my distribution is 32-bit,
will a 64-bit binary run at all?
Do you advise me to use a 32-bit kernel with yhc? Thanks a lot.
_______________________________________________
Yhc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/yhc