haskell GHC API相当于将C/C++文件/对象添加到编译中

jucafojl  于 5个月前  发布在  C/C++
关注(0)|答案(1)|浏览(78)

假设我有这个GHC命令:

ghc -ibuild/foreign/somelib \
  -lstdc++ \
  -outputdir "$buildDir" \
  foreign/somelib/somelib.o \
  src/Main.hs -o "$buildDir/Main"

字符串
runGhc命令是这样的:

runGhc (Just libdir) $ do
  (setOutputFile (Just "build/Main") -> dflags) <- getSessionDynFlags

  setSessionDynFlags $ dflags
    { importPaths      = [".", "build/foreign/somelib"]
    , ldInputs         = [Option "-lstdc++"]
    , libraryPaths     = ["build/foreign/somelib"]
    , objectDir        = Just "build"
    , hiDir            = Just "build"
    }

  target <- guessTarget "src/Main.hs" Nothing Nothing

  setTargets [target]
  load LoadAllTargets
  return ()


然而,这并不包括目标文件,从文档中我不确定如何添加它。把它作为一个目标似乎不起作用。

oxalkeyp

oxalkeyp1#

正如评论中所建议的,解决方案是通过ldInputs传递它:

setSessionDynFlags $ dflags
    { importPaths      = [".", "build/foreign/somelib"]
    , ldInputs         = [Option "foreign/somelib/somelib.o", Option "-lstdc++"]
    , libraryPaths     = ["build/foreign/somelib"]
    , objectDir        = Just "build"
    , hiDir            = Just "build"
    }

字符串
就像使用ld一样,ldInputs的定义顺序很重要。

相关问题