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 を呼び出すだけで Haskell コードをコンパイルし、すべてをリンクすることで、GHC をループからもう少し切り離すこともできます(全体的な効果はand-pgmlを使用する場合と同じですが) 。 .-pgmc-pgml

これで動作するように見えますが、GHC が考えているものと互換性のある gcc のバージョンを指定-pgmlして、gcc のバージョンを指定するのは、純粋な運に依存しているのでしょうか? -pgmc言い換えれば、FFI を使用する場合、GHC 呼び出しですべてをコンパイルしてリンクするだけでよいのでしょうか?

4

1 に答える 1

11

GHC は一般に GCC の多くの/いくつかのバージョンと互換性があります (非互換性は Evil mangler を使用すると表示されます)。

他の C コンパイラを使用しようとすると、いくつかの低レベルの問題 (フラグ、asm 形式) に対処する必要があります。

最近の GHC では、LLVM バックエンドを支持して C バックエンドを廃止することに注意してください。

于 2013-05-22T14:22:51.960 に答える