C 17、C 14、および C 11 オブジェクトのリンクの安全性
異なる C 標準でコンパイルされたオブジェクトをリンクすると、安全性に関する疑問が生じる可能性がありますそれらのオブジェクトを単一のバイナリに結合します。次の分析では、C 17、C 14、および C 11 オブジェクトのリンクの具体的な影響を調査します。
GCC 固有の考慮事項
GCC の場合、オブジェクトの任意の組み合わせのリンクC 11、C 14、または C 17 標準でコンパイルされたものは安全です。これは、GCC が同じバージョンでコンパイルされた場合に、これらの異なる標準間の ABI 互換性を保証するためです。
ただし、標準バージョンが同じであっても、異なる GCC バージョンでコンパイルされたオブジェクトをリンクすると、機能が不安定な場合に問題が発生する可能性があります。新しい規格のものが使用されていました。たとえば、C 11 標準を使用して GCC 4.9 および GCC 5 でオブジェクトをコンパイルすると、GCC 4.x での実験的な C 11 サポートが原因で非互換性が生じる可能性があります。
Other Compilers
安全性に関する詳細はコンパイラによって異なる場合があります。使用されている特定のコンパイラのドキュメントを参照することをお勧めします。
注意事項
GCC を使用する場合は、共有ライブラリ (libstdc .so) が少なくとも次のとおりであることを確認してください。 new は、リンクされたオブジェクトのコンパイルに使用されるバージョンとして使用されます。さらに、競合する std::string 実装が同じバイナリ内に共存できるため、オブジェクト間での使用の一貫性を保つよう努めてください。
概要
C でコンパイルされたオブジェクトのリンク同じコンパイラ バージョンを使用する 17、C 14、および C 11 は、通常は安全です。ただし、異なるコンパイラ バージョンでコンパイルされたオブジェクトをリンクする場合や、新しい標準の不安定な機能を使用する場合には、潜在的な互換性の問題が存在します。特定のコンパイラ要件については、関連ドキュメントを参照してください。
以上がC 17、C 14、および C 11 オブジェクトを安全にリンクすることは可能ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。