在Windows上,GHC与gcc和g ++一起分发,例如:在ghc-7.6.3\mingw\bin
下。从download page开始,在Windows二进制下载中也注意到Windows的构建“还包括对编译C ++文件的支持。”
我可以想象,分发这些编译器只是为了方便,因为Windows没有附带任何编译器。我还可以想象使用FFI是必要,但我不是百分百肯定。例如,虽然GHC将使用它自己的gcc / g ++编译器编译.c和.cpp文件,GHC也provides options选择你想要的编译器和链接器。事实上,你可以指定自己的gcc / g ++,它似乎有效。您甚至可以通过预先编译.c / .cpp文件来进一步切断循环中的GHC,并且仅调用GHC来编译Haskell代码并使用-pgml
将其全部链接(尽管整体效果是与使用-pgmc
和-pgml
)相同。
现在似乎可以工作,但是它依赖于纯粹的运气,你指定-pgml
和-pgmc
是gcc的一个版本,它与GHC有什么兼容心里?换句话说,当我使用FFI时,我真的只应该用GHC调用来编译和链接所有内容吗?
答案 0 :(得分:11)
GHC通常与许多/几个版本的GCC兼容(使用邪恶的漫游者时会出现不兼容性)。
如果您尝试使用其他C编译器,则会遇到一些低级别问题(标志,asm格式)。
请注意,最近的GHC不赞成使用LL后端来支持LLVM后端,这对于日常的Haskell开发来说有点没有用。