[GHC] #10442: Loading of shared libraries is problematic in ghc 7.10.1

GHC ghc-devs at haskell.org
Fri Jun 5 05:50:55 UTC 2015


#10442: Loading of shared libraries is problematic in ghc 7.10.1
-------------------------------------+-------------------------------------
        Reporter:  artella.coding    |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  high              |               Milestone:  7.10.2
       Component:  Compiler          |                 Version:  7.10.1
      Resolution:                    |                Keywords:
Operating System:  Linux             |            Architecture:  x86_64
 Type of failure:  Runtime crash     |  (amd64)
      Blocked By:                    |               Test Case:
 Related Tickets:                    |                Blocking:
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by artella.coding):

 Replying to [comment:5 trommler]:
 > Replying to [comment:3 rwbarton]:
 > > Isn't this another consequence of the fix for #8935 (opening shared
 libraries with RTLD_LOCAL)?
 > Yes it is.
 > > So should we also link temporary object files against any libraries
 specified on the ghc(i) command line with `-lfoo`?
 >
 > Building libtest.so like so
 > {{{
 >   gcc -shared -o libMy.so mylib.o -L. -l test -Wl,-rpath=.
 > }}}
 >
 > should fix the problem with `cabal repl`. I tried it with openSUSE's ghc
 7.8.4 that has the fix for #8935 included.
 >
 >
 >


 Hi thanks a lot, your solution works in ghc 7.10.1. But another problem
 persists. If I now reorganise such that the shared libraries are created
 in a subdirectory `libDir`, then I get an error upon a `cabal run`. That
 is if 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
 }}}

 this creates the following shared libraries :


 {{{
 libDir/libMy.so
 libDir/libtest.so
 }}}

 Then if I modify the cabal file to be :

 {{{
 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 `cabal run` gives 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

 }}}

 Why is this happening? Should I close this trac and post the problem above
 as a new Trac? Thanks

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10442#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list