clang と libc++ のコンパイル、実行、NetBeans との統合、さらには 32 ビット マシンへのクロスコンパイルまで相当な労力を費やした後、すべてを理解したと思いました。そこで、libstdc++ になかったいくつかの機能 (開発環境をひっくり返す理由) を使用し、発見しました...実際にはそれができません。
libc++ がインストールされ、動作し、コンパイルされたプログラム (動作する場合) がそれを必要とします。ただし、コンパイラは、名前空間をいじることによって、あらゆる機会に libstdc++ バージョンを使用しようとします。std::__1::map
、std::__1::basic_string
など。今、私はこの質問から、なぜそれが起こるのか、そしてなぜlibc ++がそれをするのかを知っています. 完全に適用できないため、それを消去する方法を知る必要があるだけです-私は本当に、本当にlibc ++バージョンを使用したいのですが、コードには2つのタイプが共存する必要があるものは何もありません.
libstdc++ フォルダーをインクルード パスから外そうとしましたが、失敗すると完全にアクセスできなくなりました。運がない。アドオン ライブラリは使用せず、組み込みの Linux/POSIX ヘッダー (errno、socket、syslog、fcntl) のみを使用しています。
編集:エラー メッセージ:
CoreCache.cpp:61:12: error: no member named 'emplace' in 'std::__1::map<std::__1::basic_string<char>, CacheEntry, std::__1::less<std::__1::basic_string<char> >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, CacheEntry> > >'
libstdc++ マップには emplace() がありません。libc++ バージョンは.
コマンドラインからの次の呼び出しは機能しているようです。
clang++ -o stachecache -I /usr/local/lib/clang/3.1/include/ -I /usr/include/c++/v1/ -std=c++0x -stdlib=libc++ ./*.cpp
NetBeans 内からの呼び出しは、次のことを行いません。
clang++ -stdlib=libc++ -O3 -c -O3 -Werror -MMD -MP -MF build/Release/clang-Linux-x86/CoreCache.o.d -o build/Release/clang-Linux-x86/CoreCache.o CoreCache.cpp