[GHC] #3333: GHCi doesn't load weak symbols

GHC trac at galois.com
Thu Dec 17 13:54:00 EST 2009


#3333: GHCi doesn't load weak symbols
---------------------------+------------------------------------------------
  Reporter:  heatsink      |          Owner:                       
      Type:  bug           |         Status:  new                  
  Priority:  normal        |      Milestone:  6.14.1               
 Component:  GHCi          |        Version:  6.10.4               
Resolution:                |       Keywords:  weak, dynamic loading
Difficulty:  Unknown       |             Os:  Linux                
  Testcase:                |   Architecture:  x86                  
   Failure:  None/Unknown  |  
---------------------------+------------------------------------------------
Changes (by guest):

 * cc: ghc at henning-thielemann.de (added)
  * failure:  => None/Unknown
  * version:  6.10.3 => 6.10.4

Comment:

 I encountered the same problem with LLVM recently. LLVM is also a C++
 library with C interface. I did the following hack, without knowing what
 I'm really doing. I needed to build shared object files of the LLVM
 libraries anyway, in order to use them in GHCi. Then I built a big .so
 file containing all libraries (.a) and object files (.o) of LLVM. There
 the symbols seems to have been resolved.

 {{{
 # get many small object (.o) files out of the libraries (.a)
 for src in /usr/lib/llvm/*.a; do ar -x $src ; done
 # assemble those object files and the other ones of LLVM project to a big
 shared object file (.so)
 gcc -shared -Wl,-soname,libLLVM.so.2.5 -o libLLVM.so.2.5
 /usr/lib/llvm/LLVM*.o *.o
 # provide the file with default name
 ln -s libLLVM.so.2.5 libLLVM.so
 # remove interim object files
 rm *.o
 }}}

 I also had to replace the linker options -lLLVMSupport -lLLVMCore and so
 on by -lLLVM (the monolithic so-file) in the fields extraLibraries and
 ldOptions ~/.ghc/i386-linux-6.10.4/package.conf for the Haskell package
 'llvm'.

 I have no idea whether this hack would work for other libraries.


 Btw. If you want to use LLVM in GHCi you may also have to respect the
 linker script problem described in #2615 and remove the pthread dependency
 in package.conf, too.
 With all those steps I could use LLVM in GHCi, but after a :reload,
 running an LLVM function causes GHCi to quit with:
 {{{
 ghci: JITEmitter.cpp:110: <unnamed>::JITResolver::JITResolver(llvm::JIT&):
 Assertion `TheJITResolver == 0 && "Multiple JIT resolvers?"' failed.
 }}}

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


More information about the Glasgow-haskell-bugs mailing list