問題タブ [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.
pointers - STL コンテナー、アロケーター、およびポインター ラッパー
mmap を使用して固定サイズのセグメント プールを割り当てる、カスタマイズされたスラブ アロケータを作成しました。これらのセグメントは、論理的には連続していますが、物理的には個別です。また、プールの論理開始点からのオフセットを含むポインタ ラッパー クラスも定義しました。ポインタ クラスは次のようになります。
アロケーターは次のとおりです。
次に、必要な STL として pointer_traits および iterator_traits クラスを定義しました。
これらのクラスを libc++ の STL コンテナーで使用すると、c++/v1/vector でいくつかのコンパイル エラーが発生しました。
ベクトルはポインター型で const_cast<> を使用しています。const_cast<> は生のポインター/参照でのみ使用でき、オーバーロードできません。つまり、カスタマイズされたポインターのようなオブジェクトを操作することは不可能です。
私は何か間違ったことをしていますか、それとも libc++ の STL 実装の欠陥ですか?
c++ - stringstream のストリーミングは libstdc++ 拡張機能ですか?
ストリーミングはstringstream
libstdc++ 拡張機能ですか? このプログラムはgcc-4.2
、gcc-4.7-2 (using -std=c++03)
、および clang 3.2 で and を使用して-std=c++11
コンパイルされますlibstdc++
(Andy Prowl のおかげです。コメントを参照してください)。andをclang 3.2
使用してコンパイルしません。-std=c++11
-stdlib=libc++
ofstream のコンストラクターを見ると、std::basic_streambuf<CharT, Traits>*
またはを取ることができますbasic_ostream& st
。文字列ストリームは ですがstd::basic_istream
、どちらもstd::basic_ios<CharT, Traits>
そうなので、うまくいくはずです。
次の変更により、コードは clang でコンパイルされます。
それを行う正しい方法は何ですか?cout << s;
またはcout << s.str();
?
c++ - xcode/clang/macos で libc++ でコンパイルされた静的ライブラリに対してアプリケーションをコンパイルするにはどうすればよいですか?
テスト コンソール アプリケーションをコンパイルして、同じワークスペースのスタティック ライブラリでいくつかの機能をテストしようとすると、バイナリのリンク段階で問題が発生します。これは、libc++ 標準ライブラリの使用を選択した場合にのみ発生します。
シンボルの欠落エラーは次のとおりです。
両方のターゲットで stdlibc++ を選択すると、すべてが正常にコンパイルされ、正常に実行されます。
私の質問は次のとおりです。
- 静的ライブラリで libc++ を使用する際にいくつかの制限がありますか?
- Apple/clang++ リンカ ツールのバグですか?
- 静的ライブラリで libc++ を使用するようにプロジェクトを構成するにはどうすればよいですか?
- リンカー ツールが静的ライブラリで標準の C++ ライブラリのシンボルを検出しないのはなぜですか? (依存する他のすべてのライブラリは libc++ に対してコンパイルされます)
- libc ++を使用するという考えを忘れるべきですか?
ノート:
- 静的ライブラリは libboost_system に依存しています。魔女は libc++ と libstdc++ でコンパイルして同じ結果を得ました
- 「bjam」ツールでテストを実行すると、正常に実行されます。おそらく、jam ファイルは libstdc++ を選択してファイルをコンパイルします。
- 標準ライブラリを変更するとリンクの問題が修正されることはわかっていますが、その理由を知りたいだけです。
UPDATE : 静的 lib プロジェクトで string::empty への参照を削除すると、依存するプロジェクトは libc++ で正常にコンパイルされて実行されますが、無限ループに入ります。
更新 2 : string::empty 参照を削除しても、libstdc++ で全体をコンパイルしても問題はありません。ループはありません。これはバグか何かだと思います。
更新 3 : コンパイルすると、プログラムが無期限にループする場所になります。
c++ - istream :: peek()は、常にputback()だけを返すべきではありませんか?
直感的には、C ++の仕様から判断すると、次の呼び出しで文字を読み取るistream::putback( c )
ように、常に入力バッファーを配置する必要があるように見えます。これは正しくありませんか?Xcode4.6に同梱されている最新バージョンのlibc++は、すべての場合、特に最後の文字がEOFにある場合に、この動作を強制するわけではないようです。の代わりにを使用する場合も同様です。istream::peek()
c
unget()
putback( c )
libc ++の動作は正しいですか、それともどのように正しく機能するかについての私の直感はputback()/unget()
正しいですか?
このサンプルコードを考えてみましょう。これはlibstdc++では機能しますが、libc ++では機能しません(アサーションは失敗します)。
linux - libc++またはlibstdc++を使用する必要がありますか?
私はc/c++を使用してosxとlinuxの両方のコマンドラインインターフェイス実行可能ファイルを開発しています。プロジェクトはopencvに対してリンクします。libc++またはlibstdc++を使用する必要がありますか?
libc++ - clang ++でファイルが見つかりません
clang を使用して c++ プロジェクト (g++ でブースト) をコンパイルしようとしています。私は、clang ツールチェーンを使用してブースト ライブラリ (1.53) を正常にコンパイルしました。CMake を使用してプロジェクトをコンパイルしていますが、コンパイルが次のエラーで失敗しています。
私は-stdlib=libc++
コンパイラに渡しています。libc++ をインストールするためにどのパッケージ (ubuntu) をインストールすればよいかわかりません。私のマシンにはclangとllvmがインストールされています。
libc++ をダウンロードしてコンパイルする必要がありますか? それとも、clang をインストールするときに自動的にインストールされますか?
ios - iOSおよびlibc++用のGoogleMapsSDK
私たちのプロジェクトでは、実装にlibc++を非常に厳密に使用するライブラリを使用しています。また、Google Maps SDKを追加すると、リンクエラーが発生しました。
これは、GoogleマップのSDKがlibstdc ++ライブラリを使用しているために発生しましたが、libc++を使用するコードを変更することはできません。libc ++を使用するコードとライブラリを静的ライブラリ(* .a)にカプセル化しようとしましたが、成功しませんでした。物事を機能させるチャンスはありますか?たぶん、Google MapsSDKをlibc++とリンクすることは可能ですか?
c++ - libc ++ istream_iteratorを使用してファイル内の0xFFを読み取るにはどうすればよいですか?
次のサンプルコードについて考えてみます。
そして、以下を含む入力ファイル: "foo \ xffbar":
ここで、clanglibc++とgnulibstdc++を使用したテストについて説明します。
ご覧のとおり、libc ++バージョンは、0xffがストリームの終わりであると見なし、読み取りを停止します。したがって、これはいくつかの質問につながります。
1)これは私が報告すべきlibc ++のバグですか?私のグーグル検索で既存のバグは何も見つかりませんでした。
2)この問題を回避する良い方法はありますか?
編集
次のコードが機能します。
これはバイナリ変換の問題であると私に信じさせますが、それはlibstdc++が正しく機能する理由を説明していません。
EDIT2
バイナリなしでファイルを使用することも問題なく機能します。
ですから、間違いなく何か怪しいことが起こっています。ただし、イテレータではなく、cinの実装に問題があるようです。
macos - LLVMをビルドしてlibc++に対してリンクするにはどうすればよいですか?
LLVMをビルドしてlibc++に対してリンクしようとしていますが、動作させることができません。最新バージョン(LLVM 3.2)をダウンロードしました。
Gistの完全な出力。
LLVMは、libstdc ++では正常にコンパイルおよびリンクされますが、libc++ではリンクされません。なぜlibc++とリンクしないのかわかりません。他のプログラムはうまくリンクします。私はOSXMountain Lionを実行していて、libc++はにあり/usr/lib/libc++.1.dylib
ます。使用されるコンパイラは、Apple clangバージョン4.0(tags / Apple / clang-421.0.60)(LLVM 3.1svnに基づく)です。
c++ - libc++ std::search_n でのこのクラッシュはバグですか?
できる限りこれを絞り込みましたが、バグのようです...
私は得る
std::search_n を間違って使用していないことを願っています:)
LLDB を使用して STL 実装をステップ実行することは、現時点では不可能のようです。
バージョン情報:
証拠 ;)