【问题标题】:Haskell, error while linking two filesHaskell,链接两个文件时出错
【发布时间】:2017-03-07 17:32:31
【问题描述】:

我已经开始通过“Real World Haskell”一书阅读有关 Haskell 的信息,但遇到了一个我无法弄清楚的问题。 我有两个文件。第一个,SimpleJSON.hs,包含以下代码:

module SimpleJSON
    (
        JValue(..)
      , getString
      , getInt
      , getDouble
      , getBool
      , getObject
      , getArray
      , isNull
    ) where

data JValue = JString String
            | JNumber Double
            | JBool Bool
            | JNull
            | JObject [(String, JValue)]
            | JArray [JValue]
              deriving (Eq, Ord, Show)

getString :: JValue -> Maybe String
getString (JString s) = Just s
getString _           = Nothing

getInt (JNumber n) = Just n
getInt _           = Nothing

getDouble (JNumber n) = Just n
getDouble _           = Nothing

getBool (JBool b) = Just b
getBool _         = Nothing

getObject (JObject o) = Just o
getObject _           = Nothing

getArray (JArray a) = Just a
getArray _          = Nothing

isNull v = v == JNull

我使用“ghc -c SimpleJSON.hs”来获取目标文件。然后在我的 Main.hs 中

module Main (main) where

import SimpleJSON

main = print (JObject [("foo", JNumber 1), ("bar", JBool False)])

我正在导入第二个文件,但是当我运行“ghc -o simple Main.hs SimpleJSON.o”以获取 .exe 文件时,我收到以下错误:

collect2.exe: error: ld returned 1 exit status
`gcc.exe' failed in phase `Linker'. (Exit code: 1)

感谢您的帮助

【问题讨论】:

    标签: haskell linker


    【解决方案1】:

    编译器应该通过import SimpleJSON 语句识别出Main 依赖于SimpleJSON。这意味着当您编译 Main.hs 时,SimpleJSON.hs 也将被编译并链接到生成的可执行文件中。

    通过在命令行上明确指定 SimpleJSON.o,您可能将该文件两次链接到生成的可执行文件中,这会导致您看到的失败。

    ghc -o simple Main.hs 应该足以让您的程序链接。

    【讨论】:

    • 不客气。如果您认为这是正确答案,请单击复选框接受它。
    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2012-03-10
    • 2017-08-04
    • 2011-10-14
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多