それらが同じオブジェクトファイル形式を使用し、同じマシン命令セットを対象としている限り、それらをリンクできるはずです。たとえば、それぞれ独自の言語拡張機能を備えた2つのCコンパイラがあるとします。2つの異なるファイルをコンパイルします。1つはコンパイラAを使用し、もう1つはコンパイラBを使用します。各ソースファイルは、それぞれのコンパイラの言語拡張を使用します。両方のコンパイラが同じプラットフォームとアーキテクチャをターゲットにするように設定されている限り、たとえばLinuxのi386命令セットであれば、ファイルを1つの実行可能ファイルにリンクできるはずです。
wikiのオブジェクトファイル形式のこのリストを参照してください。
これもあなたにとって興味深いかもしれません:
オブジェクトファイルを探索するためのUNIXツール
編集
この記事「C++標準ライブラリABI」によると、業界標準のC ++ ABIがあり、この標準に準拠する任意のコンパイラのオブジェクトファイルをリンクできるはずです。あなたはここでその標準を見ることができます:
Itanium C ++ ABI
このドキュメントは、CodeSourcery、Compaq、EDG、HP、IBM、Intel、Red Hat、およびSGIで構成される非公式の業界連合によって共同で作成されました...
このドキュメントでは、C ++プログラムのアプリケーションバイナリインターフェイス、つまり、ユーザーC++コードと実装で提供されるシステムおよびライブラリ間のオブジェクトコードインターフェイスを指定します。これには、事前定義されたデータ型とユーザー定義されたデータ型の両方を含むC ++データオブジェクトのメモリレイアウトと、仮想テーブルなどの内部コンパイラ生成オブジェクトが含まれます。また、関数呼び出しインターフェイス、例外処理インターフェイス、グローバルネーミング、およびさまざまなオブジェクトコード規則も含まれています。
同じ命令セット、オブジェクトファイル形式を対象とし、標準のC ++ ABI(現在はgcc / g ++のデフォルト)を使用している限り、もちろん標準のC ++ ABIが実際に標準であり、適切に実装されていると仮定すると、問題ありません。 Linux上で実行されるほとんどの最新のC++コンパイラー(これは、ターゲットとしているプラットフォームのようです)。
編集2
このSOの投稿をご覧ください。
APIの下位バイナリ互換性を維持するためのGCCとMSC++コンパイラ
MicrosoftはC++ABIに関して一貫した標準(Itaniumなど)に準拠していないようです。そのため、Windows用のgccを使用してコンパイルすると、問題が発生する可能性があります。
おそらく、次の2つの記事も参照してください。
C++でのポリシー/バイナリ互換性の問題
バイナリ互換性に関するいくつかの考え
ユーザーをItaniumABIをサポートするコンパイラーに制限することもできますが、それはターゲットオーディエンスによって異なります。