Skip to content

rpath & shared libraries 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 libDir/libtest.so test.c
gcc -fPIC -c mylib.c -o mylib.o
gcc -shared -o libDir/libMy.so mylib.o -L./libDir -l test -Wl,-rpath=./libDir

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-libraries:     test My
  extra-lib-dirs:      ./libDir

Then cabal repl works fine, but upon cabal run we get the following error :

cabal run
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_withDir/dist/build/illustrate/illustrate: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

In #10442 (closed)##10492 (closed) trommler mentions that the problem arises because -rpath is not fed as an argument for libtest.so during linking.

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, rwbarton, thoughtpolice, trommler
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information