2014-10-07 58 views
5

Próbuję skompilować program, który znalazłem w Internecie za pomocą Clang ++. Makefile generuje polecenie:Co może spowodować, że clang nie znajdzie nagłówka 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 

Ale pojawia

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

Gdybym skompilować prosty program, który zawiera <unordered_map> działa clang++ test.cpp, to kompiluje grzywny.

jestem na

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

Jeśli skompilujesz swój prosty program testowy z 'clang ++ (te opcje) test.cpp', to również się nie powiedzie. W tym momencie możesz po prostu rozpocząć usuwanie opcji, aby zobaczyć, który jest przyczyną problemu. (Zacznij od początku. To jedna z pierwszych). – hvd

+0

Dziwne, że kompiluje 'clang ++ test.cpp', ponieważ' 'wymaga C++ 11 (' -std = C++ 11') ... – Jarod42

+0

Jaka jest wersja twojego libstdC++? Czy skompilowałeś też 'test.cpp' z libstdC++? – user2079303

Odpowiedz

4

Miałem ten sam problem podczas kompilowania glogg.

Jak zaznaczyły uwagi. to było stdlib.

W pliku Makefile po uruchomieniu qmake. Zmień tę linię od

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

do tej linii poniżej

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

uprzedzenia "-stdlib = libC++" został określony w CXXFLAGS. Jest to autospecyfikowane w flagach łącznika, myślę, że musi to być również określone dla flag C++.

-2

Mówi -Wno-C++ 11-extensions. Co napisał ten plik Makefile?

+3

'-W' jest opcją kontrolującą ostrzeżenia. Jak to jest istotne? – Angew