IO CWString 对于带有 C 的 FFI。 我想在 GHCi-6ren">
gpt4 book ai didi

haskell - 让 GHCi 加载并解释带有 "foreign export"声明的模块(对于带有 C 的 FFI)?

转载 作者:行者123 更新时间:2023-12-02 13:39:12 26 4
gpt4 key购买 nike

我有一个模块(Safe.hs),其中

foreign export ccall respond_hs :: CWString -> IO CWString

对于带有 C 的 FFI。

我想在 GHCi 中加载 Safe.hs 并用它评估一些东西。

但是 ghci 无法加载它(我指定了两个源文件,因为它依赖于 valcies.lhs):

$ ghci src/valencies.lhs src/Safe.hs 
GHCi, version 7.6.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 2] Compiling Valencies ( src/valencies.lhs, interpreted ) [flags changed]

[2 of 2] Compiling Safe ( src/Safe.hs, interpreted )

src/Safe.hs:10:1:
Illegal foreign declaration: requires via-C, llvm (-fllvm) or native code generation (-fvia-C)
When checking declaration:
foreign export ccall "respond_hs" respond_hs
:: CWString -> IO CWString
Failed, modules loaded: Valencies.
*Valencies> :q
Leaving GHCi.
$

提供 -fvia-C 选项没有帮助。

相关问题

最佳答案

实际上,如told by Dirk Thierbach ,在这种情况下有两个有用的选项:

If you look up -fvia-C in the GHC manual, section flag reference, you're redirected to section 4.10.6 (Options affecting code generation). There you'll find, near -fvia-C:

-fobject-code

Generate object code. This is the default outside of GHCi, and can be used with GHCi to cause object code to be generated in preference to bytecode.

-fbyte-code

Generate byte-code instead of object-code. This is the default in GHCi. Byte-code can currently only be used in the interactive interpreter, not saved to disk. This option is only useful for reversing the effect of -fobject-code.

这解释了为什么它适用于 GHC,但不适用于 GHCI。

所以,我很高兴这样做ghci -fobject-code src/valencies.lhs src/Safe.hs现在。

相关问题

  • GHCi doesn't work with FFI export declarations/shared libaries首先对我来说似乎很困惑,因为它对我没有帮助。它涉及 foreign export也从 Haskell 到 C,但解决的问题是缺少一些目标文件,您必须将其提供给 GHCi 才能链接所有内容。就我而言,我只是省略了与程序的 C 部分的链接,因为我不需要它来测试 Haskell 模块。重新阅读该问答后,我怀疑给出 .o to GHCi 可以简单地将 GHCi 切换到正确的模式!

如果您想要的只是测试 Haskell 模块,并且它的函数可以与 C 函数隔离地工作(即它们不调用 C 函数),我相信我发现的选项比添加更多 .o将文件添加到命令行以使 GHCi 链接所有内容(您会看到,可能需要链接其他包中的某些 C 函数,这对您来说并不重要)。

关于haskell - 让 GHCi 加载并解释带有 "foreign export"声明的模块(对于带有 C 的 FFI)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28899620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com