Skip to content

Dynamic linking and libffi

After dynamic linking became the default, building/installing GHC on FreeBSD and Mac fails due to libffi. I don't see any problems on Linux.

FreeBSD without system libffi

GHC can be build:

% make maintainer-clean
% perl boot
% ./configure --prefix=/ghc-head \
              --with-iconv-includes=/usr/local/include \
              --with-iconv-libraries=/usr/local/lib \
              --with-gmp-includes=/usr/local/include \
              --with-gmp-libraries=/usr/local/lib \
              --with-gcc=/usr/local/bin/gcc47 \
              --with-gcc-4.2=/usr/local/bin/gcc47
% gmake -j10

But installation fails:

% gmake install
Installing library in /ghc-head/lib/ghc-7.7.20130323/haskell2010-1.1.1.0
"/ghc-head/lib/ghc-7.7.20130323/bin/ghc-pkg" --force --global-package-db "/ghc-head/lib/ghc-7.7.20130323/package.conf.d" update rts/package.conf.install
Shared object "libffi.so.6" not found, required by "libHSrts-ghc7.7.20130323.so"
gmake[1]: *** [install_packages] Error 1
gmake: *** [install] Error 2

FreeBSD with system libffi

The following procedure has no problems:

% make maintainer-clean
% perl boot
% ./configure --prefix=/ghc-head \
              --with-iconv-includes=/usr/local/include \
              --with-iconv-libraries=/usr/local/lib \
              --with-gmp-includes=/usr/local/include \
              --with-gmp-libraries=/usr/local/lib \
              --with-gcc=/usr/local/bin/gcc47 \
              --with-gcc-4.2=/usr/local/bin/gcc47
              --with-system-libffi \
              --with-ffi-includes=/usr/local/include \
              --with-ffi-libraries=/usr/local/lib
% gmake -j10
% gmake install

Mac without system libffi

GHC can be build:

% make maintainer-clean
% perl boot
% ./configure --prefix=/ghc-head
% make -j6

But installation fails:

% make install
Installing library in /ghc-head/lib/ghc-7.7.20130323/haskell2010-1.1.1.0
"/ghc-head/lib/ghc-7.7.20130323/bin/ghc-pkg" --force --global-package-db "/ghc-head/lib/ghc-7.7.20130323/package.conf.d" update rts/package.conf.install
dyld: Library not loaded: @loader_path/../terminfo-0.3.2.5/libHSterminfo-0.3.2.5-ghc7.7.20130323.dylib
  Referenced from: /ghc-head/lib/ghc-7.7.20130323/bin/ghc-pkg
  Reason: image not found
make[1]: *** [install_packages] Trace/BPT trap: 5
make: *** [install] Error 2

Mac with system libffi

If I do:

% make maintainer-clean
% perl boot
% ./configure --prefix=/ghc-head \
              --with-system-libffi \
              --with-ffi-includes=/usr/include/ffi \
              --with-ffi-libraries=/usr/lib
% make -j6

hsc2hs cannot find necessary .h files.

"inplace/bin/hsc2hs" '--cc=/usr/bin/gcc' '--ld=/usr/bin/gcc'  --cross-safe  --cflag=-m64 --cflag=-fno-stack-protector --cflag=-m64 --lflag=-m64 --cflag=-D__GLASGOW_HASKELL__=707 --cflag=-Dx86_64_HOST_ARCH=1 --cflag=-Ddarwin_HOST_OS=1 '--cflag=-m64' '--cflag=-fno-stack-protector' '--cflag=-Icompiler/../rts/dist/build' '--cflag=-Icompiler/stage2' '--cflag=-Icompiler/.' '--cflag=-Icompiler/parser' '--cflag=-Icompiler/utils' '--cflag=-DGHCI' '--cflag=-I/Users/kazu/work/ghc/libraries/process/include' '--cflag=-I/Users/kazu/work/ghc/libraries/directory/include' '--cflag=-I/Users/kazu/work/ghc/libraries/unix/include' '--cflag=-I/Users/kazu/work/ghc/libraries/time/include' '--cflag=-I/Users/kazu/work/ghc/libraries/containers/include' '--cflag=-I/Users/kazu/work/ghc/libraries/bytestring/include' '--cflag=-I/Users/kazu/work/ghc/libraries/array/include' '--cflag=-I/Users/kazu/work/ghc/libraries/base/include' '--cflag=-I/Users/kazu/work/ghc/rts/dist/build' '--cflag=-I/Users/kazu/work/ghc/includes' '--cflag=-I/Users/kazu/work/ghc/includes/dist-derivedconstants/header' '--lflag=-m64' '--lflag=-L/Users/kazu/work/ghc/libraries/transformers/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/template-haskell/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/hpc/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/hoopl/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/bin-package-db/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/binary/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/Cabal/Cabal/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/process/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/pretty/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/directory/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/unix/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/time/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/old-locale/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/filepath/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/containers/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/bytestring/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/deepseq/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/array/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/base/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/integer-gmp/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/libraries/ghc-prim/dist-install/build' '--lflag=-L/Users/kazu/work/ghc/rts/dist/build' '--lflag=-ldl' '--lflag=-liconv' '--lflag=-lm' '--lflag=-ldl' '--lflag=-lffi' --cflag=-Icompiler/stage2/build/autogen --cflag=-include --cflag=compiler/stage2/build/autogen/cabal_macros.h   compiler/ghci/LibFFI.hsc -o compiler/stage2/build/LibFFI.hs
LibFFI.hsc:9:17: error: ffi.h: No such file or directory
LibFFI.hsc: In function ‘main’:
LibFFI.hsc:42: error: ‘ffi_cif’ undeclared (first use in this function)
LibFFI.hsc:42: error: (Each undeclared identifier is reported only once
LibFFI.hsc:42: error: for each function it appears in.)
LibFFI.hsc:82: error: ‘ffi_status’ undeclared (first use in this function)
LibFFI.hsc:82: error: expected expression before ‘int’
LibFFI.hsc:82: error: expected ‘)’ before numeric constant
LibFFI.hsc:82: error: expected ‘)’ before numeric constant
LibFFI.hsc:83: error: ‘ffi_abi’ undeclared (first use in this function)
LibFFI.hsc:83: error: expected expression before ‘int’
LibFFI.hsc:83: error: expected ‘)’ before numeric constant
LibFFI.hsc:83: error: expected ‘)’ before numeric constant
LibFFI.hsc:99: error: ‘FFI_OK’ undeclared (first use in this function)
LibFFI.hsc:106: error: ‘FFI_DEFAULT_ABI’ undeclared (first use in this function)
compiling compiler/stage2/build/LibFFI_hsc_make.c failed (exit code 1)
command was: /usr/bin/gcc -c compiler/stage2/build/LibFFI_hsc_make.c -o compiler/stage2/build/LibFFI_hsc_make.o -m64 -fno-stack-protector -I/Users/kazu/work/ghc/includes -m64 -fno-stack-protector -m64 -D__GLASGOW_HASKELL__=707 -Dx86_64_HOST_ARCH=1 -Ddarwin_HOST_OS=1 -m64 -fno-stack-protector -Icompiler/../rts/dist/build -Icompiler/stage2 -Icompiler/. -Icompiler/parser -Icompiler/utils -DGHCI -I/Users/kazu/work/ghc/libraries/process/include -I/Users/kazu/work/ghc/libraries/directory/include -I/Users/kazu/work/ghc/libraries/unix/include -I/Users/kazu/work/ghc/libraries/time/include -I/Users/kazu/work/ghc/libraries/containers/include -I/Users/kazu/work/ghc/libraries/bytestring/include -I/Users/kazu/work/ghc/libraries/array/include -I/Users/kazu/work/ghc/libraries/base/include -I/Users/kazu/work/ghc/rts/dist/build -I/Users/kazu/work/ghc/includes -I/Users/kazu/work/ghc/includes/dist-derivedconstants/header -Icompiler/stage2/build/autogen -include compiler/stage2/build/autogen/cabal_macros.h -I/Users/kazu/work/ghc/inplace/lib/include/
make[1]: *** [compiler/stage2/build/LibFFI.hs] Error 1
make: *** [all] Error 2
Trac metadata
Trac field Value
Version 7.7
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