Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#10492 closed bug (wontfix)

rpath & shared libraries in ghc 7.10.1

Reported by: artella.coding Owned by: trommler
Priority: normal Milestone: 7.10.2
Component: Compiler Version: 7.10.1
Keywords: Cc: hvr, rwbarton, thoughtpolice, trommler
Operating System: Linux Architecture: Unknown/Multiple
Type of failure: Runtime crash Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:

Description

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 https://ghc.haskell.org/trac/ghc/ticket/10442#comment:8 trommler mentions that the problem arises because -rpath is not fed as an argument for libtest.so during linking.

Change History (5)

comment:1 Changed 4 years ago by trommler

Owner: set to trommler
Priority: highnormal

Setting priority to normal. The issue affects only C libraries that are not installed in a standard location and there is a workaround https://ghc.haskell.org/trac/ghc/ticket/10442#comment:8

comment:2 Changed 4 years ago by rwbarton

Isn't this a Cabal bug, not a GHC bug? We don't expect GHC to automatically add rpath entries for C libraries it is told to link against, do we?

comment:3 in reply to:  2 Changed 4 years ago by trommler

Replying to rwbarton:

Isn't this a Cabal bug, not a GHC bug? We don't expect GHC to automatically add rpath entries for C libraries it is told to link against, do we?

I am not sure anymore that this is actually a bug. If an executable is linked against a shared object that is not found in a standard location the user needs to provide the extra RPATH (or RUNPATH) or set LD_LIBRARY_PATH accordingly. So what I said in comment:1 is not a workaround but the actual fix.

comment:4 Changed 4 years ago by trommler

Resolution: wontfix
Status: newclosed

Closing as won't fix. Please reopen if you disagree.

comment:5 in reply to:  4 Changed 4 years ago by artella.coding

Replying to trommler:

Closing as won't fix. Please reopen if you disagree.

Hi yes I agree!. Thanks rwbarton and trommler for your help.

Note: See TracTickets for help on using tickets.