连接到MS VS的Cabal库

时间:2014-05-05 07:57:16

标签: c++ visual-studio-2012 haskell linker-errors cabal

我已经为cabal库创建了测试项目。我正在尝试构建简单的项目(使用FFI只有3个.hs文件)。

HCabalTestLib.cabal文件是下一个:

library
  exposed-modules:     Main, Parser.Template, Parser.Data
  build-depends:       base ==4.6.*
  extensions: ForeignFunctionInterface

然后,我使用下一个命令: runhaskell Setup.hs配置 runhaskell Setup.hs build

Cabal构建过程成功使用我的FFI声明和libHSHCabalTestLib-0.1.0.0.a创建Main_stub.h头文件 据我了解,libHSHCabalTestLib-0.1.0.0.a是静态库(我使用Windows)。

最后,我想在简单的MS Visual Studio项目中使用它。我将头文件复制到项目文件夹中,并将库文件(libHSHCabalTestLib-0.1.0.0.a)复制到同一文件夹中。 在项目属性中 - >链接器 - >输入 - >附加依赖项我指定了我的库。

" Build"我的项目我遇到了很多链接器错误:

1>CabalStaticLibExperiment.obj : error LNK2019: unresolved external symbol _hs_init referenced in function _main
1>CabalStaticLibExperiment.obj : error LNK2019: unresolved external symbol _hs_exit referenced in function _main
1>libHSHaskellCabalLib-0.1.0.0.lib(Main.o) : error LNK2001: unresolved external symbol _base_GHCziIOziHandleziText_hGetContents1_closure
1>libHSHaskellCabalLib-0.1.0.0.lib(Main.o) : error LNK2001: unresolved external symbol _stg_upd_frame_info
...
1>libHSHaskellCabalLib-0.1.0.0.lib(Data.o) : error LNK2001: unresolved external symbol _ghczmprim_GHCziCString_unpackCStringzh_info
1>CabalStaticLibExperiment.exe : fatal error LNK1120: 56 unresolved externals

我接下来的问题:如何将Haskell FFI静态库与MS Visual Studio项目连接? 我该如何解决这种依赖关系?

1 个答案:

答案 0 :(得分:1)

尝试链接GHC运行时libHSrts。它可能与你的ghc安装可能在lib/ghc-<version>/rts-1.0/libHSrts*之下(在Windows上可能与我引用的Linux路径不同)。有很多不同的运行时选择可以链接,包括线程,调试和编辑或不编译。选择哪种方式可能取决于您的应用和环境。

附录: _base_GHCziIOziHandleziText_hGetContents1_closure是libHSbase中的符号(通过前缀“ base ”方便地标注),而_ghczmprim_GHCziCString_unpackCStringzh_info位于libHSghc-prim中,这意味着您还必须链接它们,或命令GHC静态链接您的二进制文件。但是,静态链接可能并非适用于所有软件包,因此在添加新库时,如果需要向链接器添加新输入,请不要感到惊讶。此外,下载的库显然不会与GHC并列,而是在您的用户或全局cabal lib目录中。