Windows で使える GCC/Clang のバイナリでメジャーなものには、おおむね4つの「リリース元」があると思います。

  • Cygwin
  • MinGW / mingw-w64
  • Clang with Microsoft CodeGen (Clang/C2)
  • Windows Subsystem for Linux

このうち Windows Subsystem for Linux は今のところ Windows 10 でしか使えません。あと、あくまでも Linux 向けの GCC が Windows 上で動いているだけであるため、この GCC でビルドすると Windows 用のバイナリではなく Linux 用のバイナリができます。当然 Visual C++ と相互運用はできませんし、できたバイナリを Windows Subsystem for Linux がインストールされていない Windows で動かすこともできません。

残りの3つのうち、 Visual C++ と最も相互運用しやすいのは Clang/C2 です。C++ プロジェクトのプロパティでツールセットに Clang/C2 を指定するだけでです。いくつか制限はありますが、ちゃんとした Clang がそのまま動きますし、デバッグ情報も互換性があり、シームレスに使える…らしいです(真面目に使ったことないけど)。なお、 単一のプロジェクト内で一部のソースファイルだけツールセットを Clang/C2 にすることはできない(これは Clang/C2 だけでなく、いろいろなバージョンの Visual C++ コンパイラを使い分ける場合でも同様)ので、そういう場合はライブラリとして別プロジェクトに分離する必要があります。

Cygwin や MinGW の場合、Visual C++ との相互運用性について特に何か保証されているわけではない(はず)なので、一つ一つ自力でチェックしていく必要があります。

その2に続く

Trackback

2 comments untill now

  1. Windows 上での Visual C++ と GCC/Clang の相互運用(その2)

    その1の続き そもそも相互運用するとして、どの点に互換性が必要かを考えると、おおむね以下のようになると思います。 ABI 呼び出し規約 構造体におけるメンバの配置、特にビットフ…

  2. LLVM を Visual Studio のプラットフォームツールセットとして使う

    昔 Windows 上での Visual C++ と GCC/Clang の相互運用という記事を書いてましたが、さっき調べたらオリジナルの LLVM (Clang/C2 ではない)を Visual Studio のプラットフォームツールセットとして使うことができて MSVC とちゃんと互換性があるということを知りました。なんで調べようとしたのかもう忘れちゃいましたが(鳥頭)。 まず LLVM のダウンロードページで pre-built binary を取ってきてインストールして、 Visual St…

Add your comment now