阴谋库链接到MS VS

Cabal library linking to MS VS

本文关键字:MS VS 链接 阴谋      更新时间:2023-10-16

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

HCabalTestLib。下面是Cabal文件

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

然后,使用next命令:runhaskell设置。商品配置runhaskell设置。hs构建

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

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

在"构建"我的项目后,我有很多链接器错误:

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项目连接?如何解决这些依赖关系?

尝试链接到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目录中。