問題タブ [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.

0 投票する
2 に答える
873 参照

c++ - OSX "ld":未解決のシンボルの壊れた名前を表示する方法は? マップファイルを取得するには?

OS X 10.8.2 (Mountain Lion) で、libc++ (libstdc++ ではない) を使用してプログラムをリンクしようとするとld、未解決のシンボル エラーが発生します。

これは、次の行の codegen を参照しているようです。

これを次のように変更すると

ムーブコンストラクターの使用をやめ、非ムーブ代入演算子の使用を開始するため、すべてが正常に機能します。

私はこれを追跡しようとしていますが、従来のツールがないために妨げられています. 2 つの質問がすぐに思い浮かびます。

  • ldマップ ファイルを作成するにはどうすればよいですか? -map -Map -Wl,-map=foo -Wl,-Map=fooこのリンカーではどれも機能しません。

    /li>
  • ldmap/nm ファイルを簡単に grep できるように、未解決の C++ シンボルのデマングルされていない名前を表示するにはどうすればよいですか?

もちろん、この特定のエラーを以前に見たことがあり、その修正方法を知っている人がいれば、それらの回答も受け入れます。:)

編集:この質問を書いている途中で症状が変わったため、ムーブコンストラクターについて上で書いたことは意味がないことに気づきました。:P 何が起こっているのかをよりよく理解するたびに修正します。

編集 #2: バグが消えました。私は暫定的に、自己ビルドした libc++ を非難しています: 私の最善の推測では、(間違ったアーキテクチャ用にビルドしたため) シンボルが含まれていなかったということです。これを除くインライン関数。

ただし、マングルされた名前とその表示に関する私の質問-mapはまだ未解決です。

0 投票する
1 に答える
550 参照

c++ - clang の libc++ プロダクションの準備はできていますか?

libc++本番環境でclang を使用してポジティブな経験をした人はいますか? http://libcxx.llvm.org/libcxx_by_chapter.pdfのステータス チャートは、私にはあまりよく見えません。

0 投票する
1 に答える
8989 参照

c++ - macosxのコマンドラインからlibc++およびc++11でclangを使用する

c ++11とlibc++を有効にすると、単純なhelloworldでさえclangでコンパイルするのに問題があります。たとえば、次のコード

実行すると、コンパイルから次の出力が生成されますclang++ -std=c++11 -stdlib=libc++ main.cpp

xcodeを使用し、libc++およびc++ 11をサポートするためのオプションを設定すると、コードは正常にコンパイルされます。

返信ありがとうございます

0 投票する
2 に答える
354 参照

c++ - C ++ STL:std :: stringのconstコピーを作成するときにc_str()は変更されますか?

これは、のconstコピーの処理におけるSTL実装間の違いについての質問ですstd::string。私はそのような短いテストを持っています、それは2つのconstコピーをして、そしてによって返されたアドレスを印刷しますc_str()

libstdc++。so.6.0.16STLを使用するgcc4.6.2では、すべてのポインターが等しいものとして返されます。

この動作に頼ることはできますか?

ポータブルですか、それとも最近の規格で定義されていますか?

これは、libstdc ++、libc ++、Microsoft STL、stdcxx(apache.org)の現在または将来のバージョンで機能しますか?

0 投票する
1 に答える
447 参照

macos - clang および libc++ istream::peek() が eof フラグを設定しない

私は Mac OSX 10.8.1 (Mountain Lion) を使用しています: Apple clang バージョン 4.1 (tags/Apple/clang-421.11.66) (LLVM 3.1svn に基づく) - 最新版が利用可能です。

libc++ std::istream::peek() を使用した Clang は、eof 検出に関して正しく動作しないようです。libstdc++ では問題は発生しません。

以下の簡単な例では、std ライブラリのバージョンに応じて異なる結果が得られます。

test.cpp:

「clang++ -stdlib=libstdc++ test.cpp」でコンパイルされたファイルからの出力 (これは正しいようです):

「clang++ -stdlib=libc++ test.cpp」でコンパイルされたファイルからの出力 (これは私には正しくないようです):

この問題の最も簡単な回避策は、libc++ の代わりに libstdc++ を使用することです。残念ながら、いくつかの c++11 機能を使用する必要があるため、libc++ が唯一の解決策です。

eof ビットの動作で libc++ と libstdc++ の不一致を報告している投稿がいくつか見つかりましたが、私のものとは異なります。

誰かが私のものと同じ問題に遭遇しましたか。それを解決するための一般的な解決策はありますか?いくつかの汚い回避策を想像することはできますが、使用したくありません。

助けてくれてありがとう

0 投票する
1 に答える
10317 参照

c++ - Clang を使用した C++ 11 スレッド

C++11 スレッドを使用して言語のコンパイルを高速化する方法を学びたかった (はい、コンパイラを構築しています :x)。最初に試したサンプルでは、​​clang (3.3 SVN) でいくつかのエラーが発生しました。GCC (4.6.3) で問題なくコンパイルされました。

llvm.org の SVN から clang と libc++ をダウンロードしました。clang は GCC (4.6.3) でコンパイルされ、libc++ は clang でコンパイルされました。どちらのメイクファイルも CMake で生成されました。

clang については、次のガイドに従いました: http://llvm.org/docs/GettingStarted.html#checkout

libc++ については、次のガイドに従いました: http://libcxx.llvm.org/

コンパイルしたいコード ( foobar.cpp):

正常にコンパイルされますclang --std=c++0x -stdlib=libc++ -lpthread foobar.cppが、多くのリンカ エラーが発生します。

以下は、2 つの標準ライブラリの下にある標準検索ディレクトリです。「clang -Wp,-v -x c++ - -fsyntax-only」の結果として、次のようになりました。

試してみclang --std=c++11 -stdlib=libc++ -llibc++ -lpthread -o foobar foobar.cppましたが、リンカが再び失敗しました。libc++ が見つかりません。libc++ へのリンクに失敗しましたか、それとももっと難しいことですか?

0 投票する
2 に答える
1333 参照

c++ - boost/thread.hppは'clang++ -std = c ++ 11 -stdlib =libc++'で失敗します

この1行をclang+libc ++(C ++ 11モード)でコンパイルしようとすると:

clangは次のエラーを出します:

C ++ 11ではこれらの関数がである必要があるため、これはlibc++のバグのように見えますconstexpr

誰もが同じ問題に遭遇しました、そしてあなたは同意できますか?修正について知っていますか?

私のclangバージョンは次のとおりです。

0 投票する
1 に答える
1816 参照

c++ - libconfig ++ -stdlib =libc++未定義のシンボル

libconfig++が機能する非常に単純な例を取得しようとしています。ただし、コンパイラオプション「-stdlib =libc++」および「-std=c ++ 11」が原因で、次のリンクエラーが発生しています。

環境

ダーウィンiMac.local12.2.0

Darwinカーネルバージョン12.2.0

xnu-2050.18.24〜1 / RELEASE_X86_64 x86_64

ソース

建てる

clang ++ -o main main.cpp -lconfig ++ -stdlib = libc ++ -std = c ++ 11

エラー

0 投票する
1 に答える
1655 参照

c++ - is_swappableとis_nothrow_swappableがC++11に含まれていないのはなぜですか?

私はそれを発見して驚いた。is_swappable<T>そしてそれis_nothrow_swappable<T>は新しいC++11type_traitsメタ関数の中にはない。これらは、テンプレートの伝播noexceptや、テンプレートの非スロースワップを実装できるかどうかを判断するのに非常に役立ちます。

libc ++は、独自の内部バージョンをロールします。type_traitsのバージョン__is_swappableおよび__is_nothrow_swappableを参照してください。これらは、内部で広範囲に使用されますが、ライブラリの外部では使用できません。

私は個人的なプロジェクトのためにこれらの自分のバージョンを一緒に組み合わせることになりました。それはうまくいくようですが、どういうわけか壊れていると確信しています。

これらの2つが非常に重要であると思われるため、これら2つがないことに興味があります。この機能はC++11の標準化プロセスで考慮されましたか、それとも含まれていなかったのは見落としでしたか?それが考慮された場合、それが最終的な標準に組み込まれなかった原因は何ですか(時間の不足、実装の問題など)?これについて議論している欠陥レポートや進化の論文はありますか?これらの特性をC++1Yに組み込む計画はありますか?認められた「正しい」バージョンはどこかにありますか?

0 投票する
2 に答える
9957 参照

c++ - Xcode 4.6.2 から 7.1.1 を使用して Mac OS X 10.6 展開の c++0x/c++11 サポートを取り戻すにはどうすればよいですか

私は自分のプロジェクトで c++0x/c++11 の機能、特にコード ブロックと共有ポインターを多用しています。OS を 10.8 Mountain Lion にアップグレードしたとき (編集: 10.7 から)、Xcode のアップグレードを余儀なくされました。Xcode をアップグレードすると、次のエラーが発生するため、10.6 システムに配置するために C++ プロジェクトをコンパイルできなくなりました。

clang: error: invalid deployment target for -stdlib=libc++ (requires Mac OS X 10.7 or later)

Apple は、開発者に Snow Leopard のサポートを許可しないことで、人々にアップグレードを強制しようとしているようです。これは私を怒らせます。アーゴッ!!!

私に何ができる?

編集:いくつかのコメントを行ったり来たりした後、10.6 にはシステム libc++ ライブラリが同梱されていないことを明確にする必要があります。その結果、10.6 デプロイメント用の libc++ プロジェクトをビルドできるだけでは十分ではありません。また、10.6 ディストリビューションに libc++ バイナリを含めるか、それらに静的にリンクする必要があります。ですから、私はすでにそれを行っているという前提で続けましょう。

更新 1:この質問は、もともと Xcode 4.5.2 (質問が行われた時点での最新バージョン) で使用することを目的としていました。その後、Xcode 4.6.3 にアップグレードし、それを反映するように質問と回答を更新しました。

更新 2: Xcode 5.0.2 にアップグレードしました。以下の選択された回答にリストされている手法は、引き続き期待どおりに機能します。

更新 3:それ以来、Xcode 5.1 にアップグレードしました。以下の回答に記載されている手法は、このバージョンではまだ機能しません!

更新 4: Xcode 6.0.1 にアップグレードしました。以下の選択された回答にリストされている手法は、再び機能しているようです。

更新 5: Xcode 7.1.1 にアップグレードしました。以下の選択された回答にリストされている手法は、重要な注意点が 1 つありますが、再び機能しているようです。オープンソースの LLVM バージョンではサポートされていないため (サポートすべきではないため)、AppThinningに使用されるビットコーディングを無効にする必要があります。そのため、10.6 と tvOS/watchOS の両方でコンパイルするには、オープン ソースと Apple LLVM の clang を切り替える必要があります (これらの OS にはビットコーディングが必要なため)。