VS2010 と VS2012 の間のコンパイル済みライブラリのバイナリ互換性について混乱しています。VS2012 に移行したいのですが、多くのクローズド ソースのバイナリのみの SDK は、VS2010 用にのみ提供されています (たとえば、ハードウェア デバイスとのインターフェイス用の SDK など)。
伝統的に、私の知る限り、Visual Studio はコンパイラのバージョンに関して非常にうるさいものでした。VS2010 では、VS2008 用にコンパイルされたライブラリにリンクできませんでした。
私が今混乱している理由は、私が VS2012 への移行の過程にあり、いくつかのプロジェクトを試したからです。最大の驚きは、それらの多くがクロスバージョンで問題なく動作することです。
注: v100 モードについて話しているのではありません。私の知る限り、これは VS2010 コンパイル エンジン上の VS2012 GUI にすぎません。
VS2012 で VS2010 ソリューションを開き、[更新] をクリックして、何が起こるかを確認することについて話しています。
ブーストなどのより大きなライブラリにリンクすると、コンパイラのバージョンのチェックがあり、エラーが発生してコンパイルが中止されるため、コンパイルが機能しませんでした。他のいくつかのライブラリは、関数が欠落しているときに単に中止されます。これは私が期待していた動作です。
一方、多くのライブラリは、エラーや追加の警告なしで正常に動作します。
それはどのように可能ですか?VS2012 は、VS2010 ライブラリとのバイナリ互換性を維持するために特別な方法で作成されましたか? 動的リンクと静的リンクに依存しますか?
そして最も重要な質問: コンパイル時にエラーが発生しなくても、VS2012 プロジェクトを VS2010 でコンパイルされたライブラリにリンクするときにバグが発生しないコンパイラを信頼できますか?