Skip to content

Loading of shared libraries is problematic in ghc 7.10.1

Suppose that I have :

//test.h
int add(int a, int b);
//test.c
int add(int a, int b){
  return (a + b);
}
//mylib.c
#include "test.h"

int testAdd(){
  return add(2,3);
}

Then I compile via :

gcc -shared -o libtest.so test.c
gcc -fPIC -c mylib.c -o mylib.o
gcc -shared -o libMy.so mylib.o

Then I have Main.hs with :

module Main where
import Foreign.C.Types

foreign import ccall "testAdd" c_testAdd :: CInt -> CInt -> IO (CInt)

main = do
  result <- c_testAdd 3 4
  print result

and I have the associated cabal file :

name:                illustrate
version:             0.1.0.0
build-type:          Simple
cabal-version:       >=1.10

executable illustrate
  main-is:             Main.hs
  build-depends:       base >=4.8 && <4.9
  default-language:    Haskell2010
  extra-lib-dirs:      ./
  ghc-options:         -ltest
                       -lMy

Then upon running "cabal repl" I get the following error message (in ghc 7.10.1) :

*Main> main
/home/linux/programs/ghc-7.10.1/lib/ghc-7.10.1/bin/ghc: symbol lookup error: ./libMy.so: undefined symbol: add

If I do "cabal run" I get :

Preprocessing executable 'illustrate' for illustrate-0.1.0.0...
[1 of 1] Compiling Main             ( Main.hs, dist/build/illustrate/illustrate-tmp/Main.o )
Linking dist/build/illustrate/illustrate ...
Running illustrate...
/home/linux/Downloads/illustrate/dist/build/illustrate/illustrate: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

Note that in ghc 7.8.3, cabal 1.22.0.0 it works fine.

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