在經過大量的努力讓clang和libC++編譯,運行,與NetBeans集成,甚至交叉編譯到32位機器之後,我想我已經搞清楚了!所以我去使用libstdC++沒有的一些功能(將開發環境顛倒過來的全部理由),並發現......我實際上無法做到這一點。libC++ - 將std重命名爲std :: __ 1?
libC++已安裝,它的工作原理和編譯後的程序(當它工作時)確實需要它。然而,編譯器仍然試圖在每個機會上使用libstdC++版本,通過混淆命名空間; std::__1::map
,std::__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
事實上,'的std :: __ 1 :: map'是'的libC++'*不*在'的libstdC++'。你能告訴我們一個錯誤消息嗎? –
我在帖子中添加了錯誤。地圖的libC++版本有emplace(),但libstdC++(嘗試通過std :: __ 1 :: map訪問)版本不支持。 – DigitalMan
你可以使用你的命令行嗎?我們檢查你是否通過了正確的選項? (例如,stdlib:「clang ++ -stdlib = libC++」) –