在Windows上使用HsLua链接错误

时间:2012-08-10 19:18:30

标签: haskell lua mingw ld ffi

我在使用HsLua作为库时遇到了一些问题。 Lua编译得很好,就像一个独立的。这个版本在我的Linux机器上运行没有问题。这是我看到的链接错误。

GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> import Scripting.Lua as Lua
Prelude Lua> l <- Lua.newstate
Loading package hslua-0.3.4 ... linking ... <interactive>: C:\..\AppData\Roaming\cabal\hslua-0.3.4\ghc-7.4.1\HShslua-0.3.4.o: unknown symbol `___strtod'
ghc.exe: unable to load package `hslua-0.3.4'
Prelude Lua>

我在图书馆周围做了一些调查,发现了对strtod的调用,我想我可能已经接近但显然不够接近。

修改

这可能有所帮助,也可能没有帮助。我将发布cabal文件,我做了一些更改,例如添加os(windows)部分。

Name: hslua
Version: 0.3.4
...
Extra-source-files: src/*.h

Library
  Build-depends: base==4.*
  Exposed-modules: Scripting.Lua, Scripting.Lua.ConfigFile
  Hs-source-dirs: src
  C-sources: src/lapi.c, src/lauxlib.c, src/lbaselib.c, src/lcode.c,
             src/ldblib.c, src/ldebug.c, src/ldo.c, src/ldump.c, src/lfunc.c,
             src/lgc.c, src/linit.c, src/liolib.c, src/llex.c, src/lmathlib.c,
             src/lmem.c, src/loadlib.c, src/lobject.c, src/lopcodes.c,
             src/loslib.c, src/lparser.c, src/lstate.c, src/lstring.c,
             src/lstrlib.c, src/ltable.c, src/ltablib.c, src/ltm.c,
             src/lundump.c, src/lvm.c, src/lzio.c, src/ntrljmp.c
  Include-dirs: src
  ghc-options: -Wall
  extensions: ForeignFunctionInterface


  if os(linux)
    CC-Options: "-DLUA_USE_LINUX"

  if os(darwin)
    CC-Options: "-DLUA_USE_MACOSX"

  if os(freebsd)
    CC-Options: "-DLUA_USE_POSIX"

  if os(windows)
    CC-Options: "-DLUA_BUILD_AS_DLL"
    includes: stdlib.h

我尝试了几种不同的方法来获取项目中的stdlib,我已将其添加到项目的主标题中,并且我还在cabal文件中指定了它。让我觉得那是在咆哮错误的树。

修改-2

好吧,我还没能在win32上安装它。我尝试做的其他一些事情对我来说并不适用,以防其他人遇到同样的问题。

我将所有构建的目标文件链接到一个静态存档中,我得到了与上面相同的错误。我也尝试使用构建DLL,但我得到了一个不同的错误,但我不确定它是向前还是向后进展。

C:\..\hslua-0.3.4>ghci liblua.dll -package hslua
GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package hslua-0.3.4 ... linking ... ghc.exe: C:\..\hslua-0.3.4\ghc-7.4.1\HShslua-0.3.4.o: unknown symbol `_lua_close'
ghc.exe: unable to load package `hslua-0.3.4'

1 个答案:

答案 0 :(得分:3)

嘿,我在Windows上遇到了完全相同的事情,对我有用的是将以下内容添加到cabal文件中

  if os(windows)
     CC-options:        "-D__NO_ISOCEXT"

这使得gcc不使用特殊的__strtod,而只使用普通的__stod。