ホームページ > バックエンド開発 > C++ > 同じコンパイラを使用して C 11、C 14、および C 17 オブジェクトを安全にリンクできますか?

同じコンパイラを使用して C 11、C 14、および C 17 オブジェクトを安全にリンクできますか?

Mary-Kate Olsen
リリース: 2024-12-05 10:52:13
オリジナル
938 人が閲覧しました

Can C  11, C  14, and C  17 Objects be Safely Linked Using the Same Compiler?

C 17、C 14、および C 11 オブジェクトのリンクの互換性

安全な組み合わせ

3 つのコンパイル済みオブジェクト (A、B) が存在するシナリオ、および C) は同じコンパイラを使用して生成されます。バージョン:

  • C 11 標準でコンパイルされた A
  • C 14 標準でコンパイルされた B
  • C 17 標準でコンパイルされた C

...そして次のように仮定します:

  • ヘッダーは C で書かれています11
  • コンストラクトは 3 つの標準すべてにわたって一貫したセマンティクスを持っています
  • 相互依存関係が正しく表現されています

...これらのオブジェクトの任意の組み合わせをリンクしても 安全です GCC によると。 GCC は、使用される標準バージョンに関係なく、このような場合に ABI 互換性を保証します。

注意事項

ただし、オブジェクトが異なる GCC バージョンでコンパイルされ、不安定な C 標準機能が使用される場合、リンクの問題が発生する可能性があります。たとえば、GCC 4.9 および 5 でコンパイルされたオブジェクトを C 11 標準を使用してリンクすると、GCC 4.x での C 11 サポートが不安定なために問題が発生する可能性があります。

C 03、C 11、および C 17 の安定性さまざまな GCC バージョンでのサポートは次のとおりです:

  • C 03: すべてで安定バージョン
  • C 11: GCC 5 以降安定
  • C 17: GCC 7 および 8 で実験的

追加の考慮事項

  • 異なる C 標準バージョンを使用する場合は、共有ライブラリ (libstdc .so) が少なくとも同じくらい新しいことを確認してください。オブジェクトのコンパイルに使用されるバージョン。
  • GCC は、バージョン 5 以降、std::string の 2 つの実装を提供します。std::string を使用するオブジェクトは、互換性のために同じ実装でコンパイルする必要があります。

以上が同じコンパイラを使用して C 11、C 14、および C 17 オブジェクトを安全にリンクできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート