繰り返しますが、同じVisual-C++ バージョンのライブラリ間の ABI 互換性を探しています。
異なるプロジェクト ファイルで異なる時期にビルドされた、異なるチームのいくつかの内部 C++ DLL を組み合わせて一致させたいと考えています。ビルド時間が長いため、各チームが別のチームのライブラリのソース コードを再コンパイルする大規模なモノリシック ビルドは避けたいと考えています。
C++ インターフェイスで C++ DLL を使用する場合、すべての DLL が同じコンパイラ/Visual Studio バージョンでコンパイルされている場合にのみこれを実行できることは明らかです 。
私にはすぐにはわかりませんが、ABI の互換性を得るには、正確に同じにする必要があります。
- debug (
_DEBUG
) と release (NDEBUG
) を混在させることはできませんが、これらが異なるバージョンの共有ランタイムにリンクしていることからも明らかです。 - まったく同じバージョンのコンパイラが必要ですか、それとも結果の DLL が同じ共有C++ ランタイム (つまり、基本的に同じ再配布可能ファイル) にリンクされていれば十分ですか? (完全なC++オブジェクトを渡すと、静的は飛ばないと思います)
- 同じ vc++ バージョンの 2 つの C++ DLL が互換性を持つために同じである必要がある
コンパイラ(およびリンカー) オプションのリストは文書化されていますか?
- たとえば、同じ
/O
スイッチが必要ですか?最適化レベルは ABI の互換性に影響しますか? (そうではないことは確かです。) - または、両方のバージョンで同じ
/EH
スイッチを使用する必要がありますか? - それとも
/volatile:ms|iso
...?
- たとえば、同じ
基本的に、ABI の互換性を説明する Visual-C++ DLL に関連付ける (メタ) データのセットを作成したいと考えています。
違いがある場合、現時点では VS2015 のみに焦点を当てています。