2つのシナリオがあります。C ++シンボルをエクスポートする3つの共有ライブラリがあり、それぞれがVS7.1、VS8、およびVS9で構築されているとします。3つすべてをVS9でコンパイルします。何らかの理由で、これは機能します。シンボルを正常に見つけてそれらに対してリンクするために、VS9リンカー用にVS9の最初の2つのライブラリを再コンパイルする必要はありません。
さて、C構文(extern "C")を使用してシンボルのみをエクスポートするライブラリがある場合、これは同じですか?ABI for Cは標準化されていると言われているので、VisualStudio8でコンパイルされたCライブラリをすべてのバージョンのVisualStudioで使用できるという保証があります。
基本的に、これらすべての組み合わせは混乱を招きます。異なるバージョンのVisualStudio間でC++ベースとCベースの両方の共有ライブラリ(対応するインポートライブラリを使用)に対してリンクすることについて、どのような保証があるのかわかりません。他のバージョンのVisualStudioでのCおよびC++インポートライブラリまたは静的ライブラリの両方の下位/下位互換性に関する一般的なコンセンサスを聞きたいです。
これが私に思い浮かんだ理由は、私が使用しているVisual Studio .NET 2003(VS7.1)でコンパイルされたクローズドソースライブラリがあるためです。私のチームは、これがVS 7.1コンパイラにロックされていると考えていますが、VS8とVS9の両方、さらにはVS2010でこれらのライブラリをテストし、正常にリンクしています。しかし、これに内在する危険性についてはよくわかりません。問題のライブラリにはCバリアントとC++バリアントがあることに注意してください。基本的に、Cバリアントは標準Cエクスポートであり、C++ライブラリはCライブラリとエクスポートクラスを抽象化したものです。