ホームページ >バックエンド開発 >C++ >c 0x モードで libc を使用した Clang がこの boost::program_options サンプルのリンクに失敗するのはなぜですか?

c 0x モードで libc を使用した Clang がこの boost::program_options サンプルのリンクに失敗するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 13:43:30365ブラウズ

Why does clang with libc   in c  0x mode fail to link this boost::program_options example?

C 0x モードで libc を使用した Clang は、この boost::program_options サンプルをリンクしないのはなぜですか?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。