【问题标题】:ghc 7.6.3 not generating _stub.c and _stub.oghc 7.6.3 不生成 _stub.c 和 _stub.o
【发布时间】:2014-03-27 17:51:41
【问题描述】:

我正在学习如何让 C++ 调用库中的 Haskell 代码,我按照 FFI 完整示例 http://www.haskell.org/haskellwiki/FFI_complete_examples 中的说明进行操作

然而,在

之后
ghc -v Foo.hs

仅创建 Foo_stub.hFoo.o,没有 Foo_stub.cFoo_stub.o。根据Calling Haskell from C,ghc > 7.2 不再生成_stub.o

在这种情况下,我是否还需要 stub.o 来链接一个可执行文件使用 g++

之后的那一刻

g++ -o test Foo.o test.o `cat link_options`

hs_init 等出现很多未定义符号错误。是因为_stub.o 不存在还是缺少其他东西?

我可以使用 ghc 正确链接它们:

ghc -no-hs-main -o test test.o Foo.o -lstdc++

(看完这个问题:Building a dynamic library with haskell and using it from C++

但我想知道是否仍然可以使用 g++ 进行链接?

【问题讨论】:

  • 关于如何使CHaskell 相处的任何提示?我在 NixOS 中有ghc 8.4.3。问题是一样的:没有 Foo_stub.c.

标签: c++ c haskell


【解决方案1】:

您正在查看一个过时的示例(它使用的是 ghc 6.12.3)。此示例适用于 7.6.3:

http://www.haskell.org/haskellwiki/GHC/Using_the_FFI

【讨论】:

  • 我看过那个,但它没有提到如何使用 g++ 链接,如果我遗漏了什么,请告诉我。
  • 引用 GNU.org:当提到 C++ 编译时,通常将编译器称为“G++”。由于只有一个编译器,因此无论在何种语言环境下,将其称为“GCC”也是准确的;但是,当重点是编译 C++ 程序时,术语“G++”更有用。 gcc.gnu.org/onlinedocs/gcc-3.3.6/gcc/G_002b_002b-and-GCC.html
  • 感谢您的评论...但是它如何回答我的问题?如果没有 stub.o,我如何使用 g++/gcc 链接目标,就像使用 ghc 6 编译它们一样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
相关资源
最近更新 更多