clangとlibC++をコンパイルして実行し、NetBeansと統合し、さらに32ビットマシンにクロスコンパイルした後、私はすべてを理解したと思いました!だから私はlibstdC++が持っていなかったいくつかの機能(私の開発環境を逆さまにした全理由)を使って、実際にそれを行うことはできません。libC++ - stdの名前をstd :: __ 1に変更しますか?
libC++がインストールされ、動作し、コンパイルされたプログラム(動作する場合)が必要です。しかし、コンパイラーはまだ、ネームスペースを混乱させて、あらゆる機会にlibstdC++バージョンを使用しようとしています。 std::__1::map
,std::__1::basic_string
など。さて、私はthis questionから、なぜそれが起こるのか、なぜlibC++がそれをするのかを知っています。 は完全に適用できないので、の方法を知る必要があります。本当に本当にlibC++バージョンを使いたいのですが、コードには2つのタイプが共存する必要はありません。
libstdC++フォルダをインクルードパスから外してみましたが、失敗して完全にアクセスできなくなりました。運がない。私はアドオンライブラリを使用せず、組み込みLinux/POSIXヘッダー(errno、socket、syslog、fcntl)のみを使用しています。
EDIT:エラーメッセージ:
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++マップは(据え付けるを持っていません)。 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
実際、 'std :: __ 1 :: map'は' libC++ '*にはなく' libstdC++ 'にあります。エラーメッセージを表示できますか? –
投稿にエラーを追加しました。マップのlibC++バージョンにはemplace()がありますが、libstdC++(std :: __ 1 :: map経由でアクセスしようとしています)バージョンはありません。 – DigitalMan
正しいオプションを渡していることを確認してください。 (例:stdlib: "clang ++ -stdlib = libC++") –