3

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の呼び出しを見つけました。私は近くにいたかもしれませんが、明らかに十分に近くではなかったと思います。

編集

これは役立つ場合と役に立たない場合があります。カバールファイルを投稿します。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'
4

1 に答える 1

3

ねえ、私はウィンドウズでまったく同じことで苦労していました、そして私のために働いたのはカバールファイルに以下を追加することでした

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

これにより、gccは特別な__strtodを使用せず、通常の__strtodを使用します。

于 2013-12-09T14:54:32.637 に答える