代码之家  ›  专栏  ›  技术社区  ›  highBandWidth

Haskell程序有数据。Set不编译

  •  2
  • highBandWidth  · 技术社区  · 14 年前

    我编写了以下文件temp.hs:

    import qualified Data.Set
    import System.Environment
    
    main :: IO ()
    main = do
            args <- getArgs
            let fname = head args
            print (fname)
    

    它在ghci中加载时没有错误:

    $ ghci
    GHCi, version 6.12.3: 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 ffi-1.0 ... linking ... done.
    Prelude> :load temp.hs 
    [1 of 1] Compiling Main             ( temp.hs, interpreted )
    Ok, modules loaded: Main.
    *Main> 
    

    当我试图编译它时,会出现以下错误:

    $ ghc temp.hs -o temp
    Undefined symbols:
      "___stginit_containerszm0zi3zi0zi0_DataziSet_", referenced from:
          ___stginit_Main_ in temp.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    

    如果我获取导入数据,它编译得很好。

    版本信息:

    $ ghc --version
    The Glorious Glasgow Haskell Compilation System, version 6.12.3
    
    $ gcc --ver
    Using built-in specs.
    Target: i686-apple-darwin10
    Configured with: /var/tmp/gcc_40/gcc_40-5494~112/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin10 --with-arch=apple --with-tune=generic --host=i686-apple-darwin10 --target=i686-apple-darwin10
    Thread model: posix
    gcc version 4.0.1 (Apple Inc. build 5494)
    
    2 回复  |  直到 14 年前
        1
  •  5
  •   Travis Brown    14 年前

    您可以单独添加包(正如KennyTM建议的那样),也可以只使用 --make ,这在许多方面都要方便得多:

    ghc --make temp.hs -o temp
    

    这将导致GHC在其安装的软件包中查找任何所需的模块,其方式与GHCi完全相同。

        2
  •  4
  •   kennytm    14 年前
    ghc -package containers temp.hs -o temp
    

    当您实际使用库时,可以检查ghci可能需要哪个包:

      GHCi, version 6.12.3: 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 ffi-1.0 ... linking ... done.
      Ok, modules loaded: Main.
      Prelude Main> Data.Set.singleton 0
    > Loading package array-0.3.0.1 ... linking ... done.
    > Loading package containers-0.3.0.0 ... linking ... done.
      fromList [0]
      Prelude Main>