#7097: linker fails to load package with binding to foreign library
--------------------------+-------------------------------------------------
 Reporter:  nus           |          Owner:                
     Type:  bug           |         Status:  new           
 Priority:  normal        |      Component:  Runtime System
  Version:  7.4.2         |       Keywords:                
       Os:  Windows       |   Architecture:  x86           
  Failure:  None/Unknown  |       Testcase:                
Blockedby:                |       Blocking:                
  Related:                |  
--------------------------+-------------------------------------------------
 GHCI is unable to load 'network' package on Windows. The versions:
 {{{
 $ ghci --version
 The Glorious Glasgow Haskell Compilation System, version 7.4.2
 }}}
 {{{
 $ ghc-pkg list network
 c:/mnt/data1/ghc32b\lib\package.conf.d:
     network-2.3.0.14
 }}}

 The test code:
 {{{
 import Network

 main = withSocketsDo $ do listenOn (PortNumber 3333) -- >>= accept
 }}}

 The failure:
 {{{
 > ghci winsock-load-failure.hs
 GHCi, version 7.4.2: http://www.haskell.org/ghc/  :? for help
 Loading package ghc-prim ... linking ... done.
 Loading package integer-gmp ... linking ... done.
 Loading package base ... linking ... done.
 [1 of 1] Compiling Main             ( winsock-crash.hs, interpreted )
 Ok, modules loaded: Main.
 *Main> main
 Loading package bytestring-0.9.2.1 ... linking ... done.
 Loading package transformers-0.3.0.0 ... linking ... done.
 Loading package mtl-2.1.2 ... linking ... done.
 Loading package array-0.4.0.0 ... linking ... done.
 Loading package deepseq-1.3.0.0 ... linking ... done.
 Loading package text-0.11.2.2 ... linking ... done.
 Loading package parsec-3.1.3 ... linking ... done.
 Loading package network-2.3.0.14 ... linking ... <interactive>:
 C:\mnt\data1\ghc32b\network-2.3.0.14\ghc-7.4.2\HSnetwork-2.3.0.14.o:
 unknown symbol `__imp__WSACleanup'
 ghc.exe: unable to load package `network-2.3.0.14'
 }}}

 The load trace log ('+RTS -Dl'):
 {{{
 [...snip...]
 lookupSymbol: looking up __imp__WSACleanup@0
 initLinker: start
 initLinker: idempotent return
 lookupSymbol: symbol not found
 <interactive>:
 C:\mnt\data1\ghc32b\network-2.3.0.14\ghc-7.4.2\HSnetwork-2.3.0.14.o:
 unknown symbol `__imp__WSACleanup'
 [...snip...]
 }}}

 The symbol to be resolved:
 {{{
 $ nm network-2.3.0.14/ghc-7.4.2/HSnetwork-2.3.0.14.o |grep WSACleanup
          U __imp__WSACleanup@0
 }}}

 The actual symbol in the foreign library:
 {{{
 $ objdump -p  /c/Windows/System32/ws2_32.dll
 c:/Windows/System32/ws2_32.dll:     file format pei-i386
 [...snip...]
 [Ordinal/Name Pointer] Table
 [...snip...]
         [ 115] WSACleanup
 [...snip...]
 }}}

 The test snippet only works when compiled by ghc (so the resulting binary
 is produced by ld.bfd).

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

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to