GHCi fails to load shared object (the 'impossible' happened)
I have a project that uses two external libraries, namely
-lpcre. Building with
cabal and running the resulting executable works as expected, but I'm having trouble starting a REPL in GHCi:
% cabal repl Preprocessing executable 'etamoo' for EtaMOO-0.2.1.0... GHCi, version 7.10.1: http://www.haskell.org/ghc/ :? for help /usr/bin/ld: dist/build/etamoo/etamoo-tmp/src/cbits/crypt.o: relocation R_X86_64_PC32 against undefined symbol `crypt' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status
The error suggests I need
-fPIC, and this seems to help the
-lcrypt case, but now I get:
% cabal repl --ghc-options="-fPIC" Preprocessing executable 'etamoo' for EtaMOO-0.2.1.0... GHCi, version 7.10.1: http://www.haskell.org/ghc/ :? for help ghc: panic! (the 'impossible' happened) (GHC version 7.10.1 for x86_64-unknown-linux): Loading temp shared object failed: /tmp/ghc21539_0/libghc21539_2.so: undefined symbol: pcre_callout Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
FYI the C type of
pcre_callout is a little unusual:
extern int (*pcre_callout)(pcre_callout_block *);
In other words it is a global variable (pointer to function), not a function itself.
Any advice is welcome, including the proper way to start GHCi given these external dependencies, as well as on this apparent bug.