背景:
Clang の C 0x モードと libc を使用して Boost::program_options の例をコンパイルしてリンクしようとすると、次のエラーが発生します:
Undefined symbols for architecture x86_64: // Various undefined symbols related to Boost::program_options
説明:
このエラーの主な理由は、 libc が GCC の libstdc とバイナリ互換性がないことです。具体的には:
解決策:
この問題を解決するには、libc を標準ライブラリとして Clang を使用して Boost を再構築する必要があります:
clang++ -stdlib=libc++ ...
バイナリ非互換性の理由:
バイナリ非互換性による偶発的な混合や実行時のクラッシュを防ぐために、libc は C 11 のインライン名前空間機能を利用して、C11 の ABI (アプリケーション バイナリ インターフェイス) を変更します。同じ API (アプリケーション プログラミング インターフェイス) を維持しながら std::string を作成します。これにより、リンカーは libstdc の std::string と libc の std::string を確実に区別できるようになります。
以上がC 0x モードで libc を使用した Clang が Boost::program_options サンプルのリンクに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。