問題タブ [libc++]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xcode - libc++ の std::list を使用したオブジェクト階層 (バグ?)
libc++ リストの実装にバグを見つけたと思います。次のコードは、xcode で特定のビルド設定を使用すると、コンパイラ エラー (Field has incomlete type 'foo') を生成します。
設定は次のとおりです。
XCode バージョン: 4.4.1
C++ 言語方言: C++11 または GNU++11
C++ 標準ライブラリ: C++ 拡張機能を備えた LLVM C++ 標準ライブラリ (libc++11)
GCC libstdc++ を使用すると、エラーが解決されます。
C++11 の方言を使用しないと、エラーが解決されます。
リストの代わりにベクトルを使用すると、エラーが解決されます。
リスト実装のバグだと思いますが、よくわかりません。
無知で申し訳ありませんが、この問題を解決するために何をすべきかわかりません。
ベクトルへの切り替えは私のプロジェクトではオプションではなく、C++11 の機能が絶対に必要です。これには shared_ptr も含まれますが、GCC を使用するとヘッダーが欠落します。それに加えて、Apple はもはや GCC の新しいバージョンを提供していないようです。
おそらくlibc ++の新しいヘッダーを使用して、誰かがこの問題を再現できれば幸いです。
また、LLVM/libc++ を更新するとこの問題が解決する場合、それをお勧めしますか?
c++ - Xcode4.4でのlibc++のデバッグの問題
C ++でリストの反復をデバッグしようとすると、問題が発生します。
簡単なテストアプリを作成しました。
デバッグ中、矢印でマークされた行にいるとき、ステップオーバーすると、c ++ファイルからコードにステップインし始めます:'list'。最終的にforステートメント内のコードに到達するまで、15回ほどステップオーバーする必要があります。
この問題はXcode4.4でのみ発生します。Xcode 4.3では、デバッグは完全に機能します。
ここに、異なる結果を伴ういくつかの異なるシナリオがあります。
- コンパイラとしてLLVMGCC4.2を使用します→問題なく動作します。
- Apple LLVMコンパイラ4.0を使用し、C++標準ライブラリにlibstdc++(GNU C ++標準ライブラリ)を設定します→問題なく動作します。
- AppleLLVMコンパイラ4.0およびC++標準ライブラリ用のlibc++(C++11をサポートするLLVMC++標準ライブラリ)の設定→問題が発生します。
私が取り組んでいるプロジェクトでは、AppleLLVMコンパイラ4.0とlibc++(C++11をサポートするLLVMC++標準ライブラリ)を使用しているため、シナリオ3)でこの問題を解決する必要があります。
何が起こっているのか、そしてそれに対する修正があるかどうか誰かが知っていますか?
c++ - std::shared_ptrまたはboost::shared_ptrをカスタマイズして、NULL逆参照で例外をスローします
私はいくつかのプロジェクトを使用しているboost::shared_ptr
か、std::shared_ptr
広範囲に使用しています(一方にこの質問に対する良い答えがあるが、もう一方にはない場合は、すぐにどちらかの実装に変換できます)。Boostの実装では、Boost.Assertを使用して、実行時operator*
またはoperator->
実行時に空(NULL)ポインターが検出された場合に戻らないようにします。一方、libc++の実装にはチェックが欠けているようです。
もちろん、shared_ptr
使用する前にaの有効性を確認する必要がありますが、大規模な混合パラダイムコードベースを使用すると、例外をスローするバリエーションを試してみたいと思うようになります。ほとんどのコードは比較的例外を認識しており、セグメンテーション違反ではなく、せいぜい高レベルで再開可能な状態に失敗するためstd::terminate()
です。
の堅牢性を維持しながら、これらのアクセサを最適にカスタマイズするにはどうすればよいshared_ptr
ですか?カプセル化shared_ptr
するのthrowing_shared_ptr
が最善の選択肢のようですが、私は魔法を破るのを警戒しています。Boostソースをコピーして、ASSERT
sを適切なthrow
ステートメントに変更するのが最善ですか?
適切な型のためにどこでも使用される実際の型名smart_ptr<T>
は、マクロから展開されたtypedefです。つまりForwardDeclarePtr(Class)
、次のように展開されます。
すべてが合格、取得、または保存されるClassPtr
ので、基になる型をかなり自由に置き換えることができます。これにより、潜在的なスライス/非表示の問題が軽減されると思います。
c++ - clang++ -stdlib=libc++ で libstdc++ コンパイル済みライブラリを使用する
私は Mac OS X (10.8.2) で C++ を使用していますが、最近、libc++ stdlib を使用する clang++ コンパイラで利用できる C++11 機能を使用する必要があることに気付きました。ただし、libstdc++ (MacPorts から取得) に対してコンパイルおよびリンクされたレガシー ライブラリも使用する必要があります。
そうすることで、リンク エラーが発生しました。たとえば、を使用するレガシー ライブラリのヘッダーは、実装ではなく(つまり、の libc++ 実装)std::string
に対して解決する必要があるためです。std::__1::basic_string
std::string
std::basic_string
開発中に 2 つのライブラリを混在させる方法はありますか (たとえば、いくつかのプリプロセッサ フラグを使用するなど)。
c++ - ブースト ユニット テスト フレームワークは、clang と libc++ で中止されます
私は使っている:
SLES 11 x86_64
以下でコンパイルされたBoost 1.51.0 : ./b2 toolset=clang cxxflags="-stdlib=libc++ -std=c++11" linkflags="-stdlib=libc++"
svn からのclang (約 2 週間古い)
svn のlibc++ (ほぼ最新)
テストは最後に中止 (SIGABORT) されます:
これは非常に興味深いバックトレースです:
テスト結果を印刷しようとすると失敗します。すべてのテスト ケースに合格した場合も同様です。std::ostream の破棄中にどういうわけか例外があることがわかります。std::uncaught_exception が libc++ インライン名前空間 (__1) からのものではないのは奇妙です。
以前に同様の問題に遭遇した人はいますか?何が間違っている可能性がありますか?
更新: libcxx のバグの可能性: http://llvm.org/bugs/show_bug.cgi?id=13669
c++ - Xcode 4.5では、「C++標準ライブラリ」および「C++言語方言」の「コンパイラのデフォルト」とは何ですか?
Xcode4.5の「C++標準ライブラリ」および「C++言語方言」の「コンパイラデフォルト」の値は何ですか?
私の推測ではlibstdc++とGNU++98ですが、説明があればいいのですが。
このXcodeリリースを使用して作成されたプロジェクトは、標準C++ライブラリの新しいlibc++実装を使用します。libc ++ライブラリは、iOS5.0以降およびOSX10.7以降でのみ使用できます。12221787
プロジェクト内の以前のリリースのiOSおよびOSXでの展開を有効にするには、C++標準ライブラリのビルド設定をlibstdc++(Gnu C ++標準ライブラリ)に設定します。
新しいプロジェクトを作成すると、GNU ++11とlibc++が明示的に設定されますが、「コンパイラのデフォルト」はおそらく別のものです。
c++ - libc++ の潜在的なバグ?
次のコードは、libc++ を使用して、clang 3.1 でコンパイルされません (Xcode に付属している現在のバージョンがわからない)。他の標準ライブラリで問題なく動作します。コードにエラーがありますか、それとも libc++ のバグですか?
私が見ているエラーは次の<utility>
とおりです。
私はそれをさらに分離しようとしましたが、これは私が見つけた最小限の例です. 興味深いことに、2 番目のマップで置き換えると機能します (最初のマップを int で置き換える場合も同様string
です) 。int
int
string
c++ - std::map は、コンパレーターの operator() が const である必要がありますか?
次のコードは、OS X 10.8 で libc++ を使用すると、XCode 4.5 の clang++ でコンパイルできません。
エラー:
壊れた.cpp:11:8: 注: 候補関数は実行できません: 'this' 引数の型は 'const FooComparator' ですが、メソッドはマークされていません const bool operator()(const Foo& left, const Foo& right) {
libc++ をオフにして libstdc++ でビルドすると、すべて問題ありません。明らかに、FooComparator::operator() を const にすることでこれを回避できますが、これが libc++ が厳しすぎることに問題があるのか、それとも標準 (C++03 と C++11 の両方) ) は実際には、コンパレーターの operator() が const である必要があります (この場合、libstdc++ で動作するという事実は幸運な事故です)。
linux - libc ++を使用したubuntu 11.04でのclang ++リンクの問題
ubuntu 11.04でlibc ++をコンパイルし、ソフトリンクを作成しました
/usr/lib の下、stl ヘッダー ファイルのソフト リンクも
/usr/include/c++ の下
小さなマルチスレッドの hello world の例をコンパイルすると、コンパイルで次のエラーが返されました。
c++ - Google Test、Clang、およびlibc++を使用したテストの構築の問題
次のCMake構成でGoogleTestを構築してみました。
ビルドは、CMakeが適切なコンパイラーを選択したことを示していますが、私のコンパイラーフラグが通過していません:
最終的な目標は、Clangとlibc ++でビルドするプロジェクトに、GoogleTestでビルドするテストを持たせることです。つまり、libc++で構築されたGoogleTestも必要です。