Skip to content

SDL2 seems utterly broken on Windows #320

@sheaf

Description

@sheaf

I was using the SDL package just fine on Windows about a year ago. Since then, it seems things have changed and I have not managed to get SDL2 working at all.

On GHC 9.12 and below, when trying to build sdl2 I get errors like:

error: ld.lld: warning: ignoring unknown argument: -exclude-symbols:console_ansi_main
ld.lld: warning: ignoring unknown argument: -exclude-symbols:console_wmain
ld.lld: warning: ignoring unknown argument: -exclude-symbols:WinMain
ld.lld: error: -exclude-symbols:console_ansi_main is not allowed in .drectve
ld.lld: error: -exclude-symbols:console_wmain is not allowed in .drectve
ld.lld: error: -exclude-symbols:WinMain is not allowed in .drectve
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I think this is because the version of Clang shipped with GHC 9.12 is too old, so that's not a problem with the sdl2 package.

Now, GHC 9.14 has updated the version of Clang and includes many other Windows-related fixes, so I was hopeful. Indeed, the bug above seems to have gone away. However, the following simple program:

main :: IO ()
main = do
  putStrLn "Hello"
  getLine
  putStrLn "Goodbye"

seems to run into issues when compiling with a dependency on sdl2. When I run the program, I get:

<stdin>: hGetLine: invalid argument (Bad file descriptor)
While handling GHC.Internal.IO.FD.fdRead: invalid argument (Bad file descriptor)

This is with a trivial cabal package with build-depends: base, sdl2 == 2.5.5.0 (sdl2-2.5.5.1 doesn't seem to compile, but that's a separate issue that I've fixed in #321). Removing the dependency on sdl2 makes it all work fine.

I'm using the mingw-w64-clang-x86_64-SDL2-2.32.10-1 system library, if that makes a difference.

I've opened an issue on the GHC issue tracker as well.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions