2016-08-24 1 views
1

C++プロジェクトをサードパーティ製の静的ライブラリ(.lib)にリンクしようとするのに苦労した後、.libファイルがコンパイルされた同じコンパイラを使用してプロジェクトをコンパイルすることを確認して問題を解決しましたMSVC11)。C/C++の 'obj'ファイルが特定のコンパイラに対してのみ有効なのはなぜですか?

これまで、すべての.objファイルが同等であると仮定していました。これにより、.libファイル(さまざまな.objを含む)を使用して、今後開発したい他のプロジェクトで使用できます。しかし、これは間違った前提でした。

私はなぜMSVCのコンテキストで.objファイルがコンパイラのバージョンによって異なるのか不思議です。 x86アプリケーションを対象としている場合、MSVC11/12/14を使用してコンパイルしたかどうかにかかわらず、objファイルを同じタイプの命令で構成しないでください。

TLDR;別のMSVCコンパイラを使用して作成された.objにプロジェクトをリンクできないのはなぜですか?

+4

要約:ABIのため。 – SergeyA

+0

"' .doc'は '.docx'や他のMS-Officeバージョンの' .doc'と異なっているのはなぜですか? – Olaf

+0

ポイントを伸ばすだけで、1980年に作られたオブジェクトファイルをリンクすると思いますか? –

答えて

1

これは、別のバージョンのVisual C++ランタイムライブラリにリンクされている可能性があります。これは、使用しているバージョンと互換性がありません。

この問題は、DLLからC++オブジェクトを公開しようとすると、この問題が発生する可能性があります。