libc を使用して、boost::program_options を含むプログラム例を Clang でコンパイルするc 0x モードでは、未定義のシンボル エラーが発生します。ただし、 g -mp-4.7 を使用するか、 libc を使用せずに clang を使用すると、同じコードが正常にコンパイルおよびリンクされます。
この問題は、boost::program_options の非互換性によって発生します。 libstdc 、 libc 付き。互換性のない標準ライブラリの誤った混合を回避し、バイナリ互換性を確保するために、libc は「インライン名前空間」と呼ばれる C11 機能を採用しています。これにより、アプリケーション プログラミング インターフェイス (API) に影響を与えることなく、std::string のアプリケーション バイナリ インターフェイス (ABI) が変更されます。
この互換性の問題を解決するには、clang を使用して boost を再構築します。 -stdlib=libc flag:
clang++ -stdlib=libc++
このアクションは、libc を使用して boost を再構築し、互換性のない標準ライブラリの使用によって生じるシンボルの競合を回避します。
以上がc 0x モードで libc を使用した Clang がこの boost::program_options サンプルのリンクに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。