使用Emscripten编译Nim和SDL2映像时类型冲突

使用Emscripten编译Nim和SDL2映像时类型冲突,c,sdl-2,emscripten,nim-lang,sdl-image,C,Sdl 2,Emscripten,Nim Lang,Sdl Image,我试图编译一个Nim项目,该项目使用带有Emscripten的SDL2映像,但我得到了几个冲突类型错误。我可以在这个小代码片段中重现这个问题: index.nim import sdl2, sdl2.image const imgFlags: cint = IMG_INIT_PNG if image.init(imgFlags) != imgFlags: raise Exception.newException( "SDL2 Image initialization failed,

我试图编译一个Nim项目,该项目使用带有Emscripten的SDL2映像,但我得到了几个冲突类型错误。我可以在这个小代码片段中重现这个问题:

index.nim

import sdl2, sdl2.image

const imgFlags: cint = IMG_INIT_PNG
if image.init(imgFlags) != imgFlags:
  raise Exception.newException(
    "SDL2 Image initialization failed, SDL error: " & $getError())
nim.cfg

@if emscripten:
  define = SDL_Static
  gc = none
  cc = clang
  clang.exe = "emcc"
  clang.linkerexe = "emcc"
  clang.options.linker = ""
  cpu = "i386"
  out = "index.html"
  warning[GcMem] = off
  passC = "-Wno-warn-absolute-paths -I/path/to/SDL2/headers"
  passL = "-s USE_SDL=2 -s USE_SDL_IMAGE=2 -s SDL2_IMAGE_FORMATS='[\"png\"]'"
@end
当我编译这个代码段时,我得到一个错误:类型冲突

$ nim c -d:emscripten index.nim
Hint: used config file '/path/to/Nim/config/nim.cfg' [Conf]
Hint: used config file '/path/to/my-project/nim.cfg' [Conf]
Hint: system [Processing]
Hint: index [Processing]
Hint: sdl2 [Processing]
Hint: macros [Processing]
Hint: unsigned [Processing]
Hint: strutils [Processing]
Hint: parseutils [Processing]
Hint: math [Processing]
Hint: algorithm [Processing]
SDL2 will be statically linked. Please make sure you pass the correct linker flags (library search paths, linked libraries).
Hint: image [Processing]
CC: index
Error: execution of an external compiler program 'emcc -c -w -Wno-warn-absolute-paths -Iinclude  -I/path/to/Nim/lib -o /path/to/my-project/nimcache/index.o /path/to/my-project/nimcache/index.c' failed with exit code: 1

/path/to/my-project/nimcache/index.c:65:21: error: conflicting types for 'SDL_GetError'
N_NIMCALL(NCSTRING, SDL_GetError)(void);
                    ^
/path/to/SDL2/SDL_error.h:42:37: note: previous declaration is here
extern DECLSPEC const char *SDLCALL SDL_GetError(void);
                                    ^
我是不是弄错了什么?我怎样才能修好它

编辑:如果我从nim.cfg中删除
define=SDL\u Static
,我不会收到此错误,但如果我这样做,我无法静态链接到SDL


Nim编译器版本0.16.1(2017-05-07)[Linux:amd64](devel branch的最新版本)

emcc(Emscripten gcc/clang-like replacement)1.37.9(commit b5bee629cb54864e7e231ae55a7d0ae9bdc25c6c)

这是一个通过拉式请求修复的问题。它应该在软件包sdl2的1.2版中发布。在此之前,您可以从存储库安装最新(开发)版本:

nimble install sdl2#head

要静态链接,请将
--dynlibOverride:SDL2
传递到Nim编译器。

看起来SDL2.image.Nim模块有错误。当编译到正常本机目标时,可能会重现此问题。如果是这样,请将问题报告给nim lang/sdl2项目。如果我运行
nim c index.nim
(no
-d:emscripten
),它将编译无误。