私のVS2012では、v90、v100、v110、v110_xpの4つのツールセットを利用できます。testlib(静的ライブラリ)とtestexe(コンソールアプリケーション)の2つのプロジェクトで簡単なテストを行いました。インターフェイスは、署名付きの1つの関数にすぎませんでしたvoid test()
。結果:
- testlib(v90)、testexe(v90以外)->リンクしません
- testlib(v100)、testexe(v110またはv110_xp)->リンクします
ただし、v100とv110がリンクするのは少し奇妙に思えたので、シナリオを少し複雑にしようとしました。これで、私のメソッドは次のようになりますstd::map<std::string, std::string> test(const std::string& arg)
。予想どおり、testlib(v100)とtestexe(v110)はリンクしません(mismatch detected for '_MSC_VER'
)。
ただし、testlib(v110)とtestexe(v110_xp)はリンクし、結果のexeはWindowsXPで動作します。これは偶然ですか、それともサポートされているシナリオですか?これが偶然の場合は、v110_xpで使用可能な機能のみを使用し、この互換性を破るサンプルコードを歓迎します。ライブラリの2つのバージョンをクライアントにデプロイする必要があるのか、それともv110でコンパイルされたバージョンだけをデプロイするのか疑問に思っています。