Skip to content

GHCi fails to load shared object (the 'impossible' happened)

I have a project that uses two external libraries, namely -lcrypt and -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.

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