Runtime linker errors with CSFML on Windows
Another day, another runtime linker bug on Windows. This time, it's from the CSFML library (written in C++). I observed this when trying to load the SFML Haskell library in GHCi.
To install CSFML in MSYS2:
pacman -S mingw-w64-x86_64-csfml
Here's the Haskell code I'm using:
module Main (main) where
import Foreign.Ptr
newtype CircleShape = CircleShape (Ptr CircleShape)
deriving Show
foreign import ccall unsafe "sfCircleShape_create"
sfCircleShape_create :: IO CircleShape
foreign import ccall unsafe "sfCircleShape_copy"
sfCircleShape_copy :: CircleShape -> IO CircleShape
main :: IO ()
main = do
putStrLn "----------------------"
cs1 <- sfCircleShape_create
print cs1
cs2 <- sfCircleShape_copy cs1
print cs2
putStrLn "----------------------"
Compiling it with ghc -lcsfml-graphics SFML.hs
on GHC 8.0.2 and HEAD seems to work fine. But if you run it in GHCi, it breaks.
With GHCi 8.0.2:
$ ghci -lcsfml-graphics SFML.hs
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
ghc.exe: addDLL: csfml-graphics-2.dll (Win32 error 127): The specified procedure could not be found.
ghc.exe: Could not load `csfml-graphics-2.dll'. Reason: addDLL: could not load DLL
Loaded GHCi configuration from C:\Users\RyanGlScott\AppData\Roaming\ghc\ghci.conf
[1 of 1] Compiling Main ( SFML.hs, interpreted )
Ok, modules loaded: Main.
> main
ByteCodeLink: can't find label
During interactive linking, GHCi couldn't find the following symbol:
sfCircleShape_create
This may be due to you not asking GHCi to load extra object files,
archives or DLLs needed by your current session. Restart GHCi, specifying
the missing library using the -L/path/to/object/dir and -lmissinglibname
flags, or simply by naming the relevant files on the GHCi command line.
Alternatively, this link failure might indicate a bug in GHCi.
If you suspect the latter, please send a bug report to:
glasgow-haskell-bugs@haskell.org
With GHC HEAD:
$ ..\..\..\Software\ghc\inplace\bin\ghci -lcsfml-graphics SFML.hs
GHCi, version 8.1.20170108: http://www.haskell.org/ghc/ :? for help
ghc-stage2.exe: addDLL: csfml-graphics-2.dll (Win32 error 127): The specified procedure could not be found.
ghc-stage2.exe: Could not load `csfml-graphics-2.dll'. Reason: addDLL: could not load DLL
Loaded GHCi configuration from C:\Users\RyanGlScott\AppData\Roaming\ghc\ghci.conf
Ok, modules loaded: Main (SFML.o).
> main
ghc-stage2.exe: C:\Users\RyanGlScott\Documents\Hacking\Haskell\SFML.o: unknown symbol `sfCircleShape_create'
I also get the same error with D2941 (#13082 (closed)) applied.
Trac metadata
Trac field | Value |
---|---|
Version | 8.0.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Runtime System (Linker) |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | Phyx- |
Operating system | |
Architecture |