2012-01-25 59 views
9

在經過大量的努力讓clang和libC++編譯,運行,與NetBeans集成,甚至交叉編譯到32位機器之後,我想我已經搞清楚了!所以我去使用libstdC++沒有的一些功能(將開發環境顛倒過來的全部理由),並發現......我實際上無法做到這一點。libC++ - 將std重命名爲std :: __ 1?

libC++已安裝,它的工作原理和編譯後的程序(當它工作時)確實需要它。然而,編譯器仍然試圖在每個機會上使用libstdC++版本,通過混淆命名空間; std::__1::mapstd::__1::basic_string等等。現在,我從this question知道爲什麼會發生這種情況,爲什麼libC++會這麼做。我只需要知道如何去掉它,因爲它完全不適用 - 我真的真的想要使用libC++版本,而且在我的代碼中沒有任何東西需要這兩種類型共存。

我已經嘗試將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++映射沒有佈設()。 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調用沒有-std=c++0x,是不是需要? std::map::emplace是一個C++ 11方法。

DigitalMan(OP): @araqnid這實際上做到了! Clang抱怨說這個論點沒有被使用 - 事實上,即使它被使用和需要時,它依然會這樣做 - 所以我將它從NetBeans配置中拿出來了。當然,錯誤的警告比完全錯誤要好。

相關問題