Skip to content

binaries built with GHC on Mac OS X 10.5 (Leopard) do not work on 10.4 (Tiger)

It seems that binaries (at least those linked with the threaded runtime) built with GHC on Mac OS X 10.5 do not work on Mac OS X 10.4. The error message in my case is

dyld: lazy symbol binding failed: Symbol not found: _pthread_cond_init$UNIX2003
  Referenced from: <the executable>
  Expected in: /usr/lib/libSystem.B.dylib

I believe that the primary reasons for this is that the runtime system is linked against the 10.5 system libraries, which are not ABI compatible with the 10.4 system libraries.

Apple provides both 10.4 and 10.5 SDKs with 10.5, along with compiler and linker options for those who want to build backward-compatible binaries. I tried to pass these options to the linker, which results in the error message

Undefined symbols:
  "_strerror$UNIX2003", referenced from:
      _newThreadLocalKey in libHSrts_thr.a(OSThreads.thr_o)
      _setThreadLocalVar in libHSrts_thr.a(OSThreads.thr_o)
      _freeThreadLocalKey in libHSrts_thr.a(OSThreads.thr_o)
      _my_mmap in libHSrts_thr.a(OSMem.thr_o)
      _rtsSysErrorMsgFn in libHSrts_thr.a(RtsMessages.thr_o)
  "_fputs$UNIX2003", referenced from:
      _heapCensus in libHSrts_thr.a(ProfHeap.thr_o)
  "_read$UNIX2003", referenced from:
      ___hscore_PrelHandle_read in libHSbase-4.0.0.0.a(PrelIOUtils.o)
  "_fcntl$UNIX2003", referenced from:
      _resetNonBlockingFd in libHSrts_thr.a(RtsUtils.thr_o)
      _resetNonBlockingFd in libHSrts_thr.a(RtsUtils.thr_o)
      _setNonBlockingFd in libHSrts_thr.a(RtsUtils.thr_o)
      _setNonBlockingFd in libHSrts_thr.a(RtsUtils.thr_o)
  "_pthread_cond_init$UNIX2003", referenced from:
      _initCondition in libHSrts_thr.a(OSThreads.thr_o)
  "_open$UNIX2003", referenced from:
      ___hscore_open in libHSbase-4.0.0.0.a(PrelIOUtils.o)
  "_kill$UNIX2003", referenced from:
      _shutdownHaskellAndSignal in libHSrts_thr.a(RtsStartup.thr_o)
  "_select$UNIX2003", referenced from:
      _fdReady in libHSbase-4.0.0.0.a(inputReady.o)
  "_write$UNIX2003", referenced from:
      _ioManagerWakeup in libHSrts_thr.a(Signals.thr_o)
      _ioManagerDie in libHSrts_thr.a(Signals.thr_o)
      _generic_handler in libHSrts_thr.a(Signals.thr_o)
      ___hscore_PrelHandle_write in libHSbase-4.0.0.0.a(PrelIOUtils.o)
ld: symbol(s) not found

It would be nice if GHC on OS X shipped with two version of the runtime (and the base library?), and had compiler flags to build compatible binaries. This could be also a problem in the future, with the next OS X versions.

See also this thread: http://lists.apple.com/archives/Darwin-dev/2007/Nov/msg00109.html

Trac metadata
Trac field Value
Version 6.10.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Build System
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information