2012-01-25 20 views
9

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 
+3

実際、 'std :: __ 1 :: map'は' libC++ '*にはなく' libstdC++ 'にあります。エラーメッセージを表示できますか? –

+0

投稿にエラーを追加しました。マップのlibC++バージョンにはemplace()がありますが、libstdC++(std :: __ 1 :: map経由でアクセスしようとしています)バージョンはありません。 – DigitalMan

+0

正しいオプションを渡していることを確認してください。 (例:stdlib: "clang ++ -stdlib = libC++") –

答えて

2

araqnid: NetBeansの呼び出しには0123がありません、それは不要ですか? std::map::emplaceはC++ 11メソッドです。

DigitalMan(OP): @araqnidそれは実際にそれでした! Clangは、その議論が未使用であることを訴えました。実際、使用され、必要とされているにもかかわらず、NetBeans構成から取り除いていました。誤った警告は完全なエラーよりも優れています。

関連する問題