4.2 コンパイラでコンパイルしたオブジェクトファイルやライブラリは、5.0 コンパイラでコンパイルしたオブジェクトファイルやライブラリとは絶対にリンクできないというわけではありません。リンクできないのは、ファイルやライブラリが C++ インタフェースを持っている場合です。
C++ でコーディングされているにもかかわらず、外部に対して C インタフェースしか用意されていないライブラリがときどきあります。C インタフェースを持っているということは、インターフェース先は元のプログラムが C++ で作成されていることを知らないということです。もっと具体的に言えば、C インタフェースを持つということは、以下のことがすべて当てはまることを意味します。
外部から呼び出されるすべての関数は C リンケージを持ち、パラメータと戻り値に C の型だけを使用する。
インタフェースのすべての関数へのポインタは C リンケージを持ち、パラメータと戻り値に C の型だけを用する。
外部から認識できるすべての型は、C の型である。
外部から使用可能なすべてのオブジェクトは、C の型である。
アプリケーションとライブラリの間で C++ の例外の受け渡しができない。
cin、cout、cerr、clog を使用することはできない。
ライブラリが C インタフェースの条件を満たす場合、そのライブラリは、C ライブラリを使用可能なあらゆる場所で使用できます。つまり、そうしたライブラリのコンパイルと、そのライブラリとリンクするオブジェクトファイルのコンパイルには、異なるバージョンの C++ コンパイラを使用することができます。
ただし、上記の条件の 1 つでも満たされない場合は、ファイルとライブラリをリンクすることはできません。リンクが成功したとしても、プログラムは正しく動作しません。