2012-08-10 64 views
3

我有一些使用HsLua作为库的问题。 Lua作为一个独立版本编译得很好。而这个版本在我的Linux机器上运行没有问题。这是我看到的链接错误。在Windows上使用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. 
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,我已经在该项目主标题添加它,我也是在小集团文件中指定它。让我觉得这是在吠叫错误的树。

EDIT 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' 

回答

3

嘿,我用同样的事情在Windows挣扎,什么工作对我来说是添加以下的小集团文件

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

,使得GCC不使用特殊__strtod而是仅仅是正常的。

+0

你的环境是什么样的?我绝对没有像以前一样的错误,但是我在ntrljmp.o中有一个未知的符号错误。你是否与静态或共享库链接? – M15K 2013-12-10 15:20:16