2014-10-07 3 views
5

मैं क्लैंग ++ का उपयोग कर वेब पर मिले एक प्रोग्राम को संकलित करने की कोशिश कर रहा हूं। Makefile इस आदेश उत्पन्न करता है:क्लैंग को unordered_map शीर्षलेख नहीं ढूंढने का कारण क्या हो सकता है?

clang++ -c -arch x86_64 -msse3 -std=c++11 -stdlib=libstdc++ 
-Wno-missing-field-initializers -Wno-missing-prototypes -Wreturn-type 
-Wno-non-virtual-dtor -Wno-exit-time-destructors -Wformat -Wmissing-braces 
-Wparentheses -Wno-switch -Wunused-function -Wunused-label -Wno-unused-parameter 
-Wunused-variable -Wunused-value -Wno-empty-body -Wuninitialized -Wunknown-pragmas 
-Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion 
-Wint-conversion -Wno-shorten-64-to-32 -Wenum-conversion -Wno-newline-eof 
-Wno-c++11-extensions -Wno-logical-op-parentheses -Wno-trigraphs 
-Wno-invalid-offsetof -Wno-sign-conversion -Wdeprecated-declarations 
-fmessage-length=0 -fno-exceptions -fstrict-aliasing -fvisibility=hidden 
-fvisibility-inlines-hidden -funsafe-math-optimizations -ftrapping-math -fno-rtti 
-fpascal-strings -fasm-blocks -O3 -Iinclude/ src/main.cpp 

लेकिन मैं

src/main.cpp:23:10: fatal error: 'unordered_map' file not found 
#include <unordered_map> 
     ^
1 error generated. 

मिल अगर मैं एक साधारण प्रोग्राम है कि <unordered_map> शामिल clang++ test.cpp चल संकलन, यह ठीक संकलित करता है।

मैं

Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) 
Target: x86_64-apple-darwin13.3.0 
Thread model: posix 
+1

यदि आप अपने सरल परीक्षण कार्यक्रम को 'clang ++ (उन विकल्पों) test.cpp' के साथ संकलित करते हैं, तो यह भी असफल हो जाएगा। उस बिंदु पर, आप यह देखने के लिए विकल्पों को हटाने शुरू कर सकते हैं कि समस्या का कारण कौन सा है। (सामने से शुरू करें। यह पहले में से एक है।) – hvd

+0

अजीब है कि 'clang ++ test.cpp' संकलित करता है,' 'के रूप में C++ 11 ('-std = C++ 11') की आवश्यकता होती है ... – Jarod42

+0

आपके libstdC++ का संस्करण क्या है? क्या आपने libstdC++ के साथ 'test.cpp' संकलित किया था? – user2079303

उत्तर

4

ग्लोग को संकलित करते समय मुझे एक ही समस्या थी।

जैसा कि टिप्पणियों ने बताया है। यह stdlib था।

qmake चलाने के बाद मेकफ़ाइल में। नीचे

CXXFLAGS  = -g -Wextra -std=c++11 -stdlib=libc++ -DGLOGG_VERSION=\"`cat .tarball-version`\" -O2 -arch x86_64 -Wall -W $(DEFINES) 

नोटिस इस लाइन के लिए से

CXXFLAGS  = -g -Wextra -std=c++11 -DGLOGG_VERSION=\"`cat .tarball-version`\" -O2 -arch x86_64 -Wall -W $(DEFINES) 

इस लाइन बदलें "-stdlib = libC++" cxxflags में निर्दिष्ट किया गया था। यह लिंकर झंडे में स्वत: निर्दिष्ट है, मुझे लगता है कि इसे सी ++ झंडे के लिए भी निर्दिष्ट करने की आवश्यकता है।

-2

पर हूँ इसे कहते हैं -Wno-C++ 11 एक्सटेंशन। मेकफ़ाइल क्या लिखा था?

+3

'-W' एक विकल्प है जो चेतावनियों को नियंत्रित करता है। यह कैसे प्रासंगिक है? – Angew

संबंधित मुद्दे