12

在 Windows 上,GHC 与 gcc 和 g++ 一起分发,例如在ghc-7.6.3\mingw\bin. 从下载页面,在 windows 二进制下载下还注意到,Windows 的构建“还包括对编译 C++ 文件的支持”。

我可以想象分发这些编译器只是为了方便,因为 Windows 没有附带任何编译器。我也可以想象使用 FFI 是必要的,但我不是 100% 确定。例如,虽然 GHC 将使用它自己的 gcc/g++ 编译器来编译 .c 和 .cpp 文件,但 GHC 还提供了选择您想要的任何编译器和链接器的选项。事实上,你可以指定你自己的 gcc/g++ 并且它似乎工作。您甚至可以通过提前编译 .c/.cpp 文件将 GHC 进一步从循环中移除,并且只调用 GHC 来编译 Haskell 代码并将其全部链接使用-pgml(尽管整体效果与使用-pgmcand相同-pgml) .

现在这似乎可行,但它是否依赖于您指定的纯运气-pgml-pgmc成为与 GHC 所想的兼容的 gcc 版本?换句话说,当我使用 FFI 时,我真的只应该用 GHC 调用编译和链接所有内容吗?

4

1 回答 1

11

GHC is generally compatible with many/several versions of GCC (the incompatibilities appear when using the evil mangler).

If you try using other C compilers, you'll have a few low level issues to contend with (flags, asm formats).

Note that more recent GHCs deprecate the C backend in favor of the LLVM backend, making this somewhat moot for day-to-day Haskell development.

于 2013-05-22T14:22:51.960 回答