阴谋库链接到MS VS
Cabal library linking to MS VS
我已经为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目录中。
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 为什么我不能在同一 MS VS 解决方案中的两个控制台应用中使用C++特征(仅标头库)?
- C++不正确,不需要重新声明类成员变量 MFC 手工解决方案/项目 MS VS 2015
- 错误 C2601:'main':本地函数定义非法 - MS VS 2013 编译器
- 2个项目可以在MS VS 2008中创建单个DLL
- 是否有一种方法可以从VS环境之外的MS单元测试框架中获取信息
- 禁用MS VS中的#DEN后缀
- 阴谋库链接到MS VS
- 如何在MS VS中从大量.c和.h文件中编译静态库
- 使用qmake生成makefile,它对MS VS有额外的依赖