2014-10-07 14 views
5

Tôi đang cố gắng biên dịch một chương trình tôi tìm thấy trên web bằng cách sử dụng Clang ++. Các Makefile tạo lệnh này:Điều gì có thể khiến bạn không tìm thấy tiêu đề 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 

Nhưng tôi nhận được

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

Nếu tôi biên soạn một chương trình đơn giản bao gồm <unordered_map> chạy clang++ test.cpp, nó biên dịch tốt.

Tôi đang trên

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

Nếu bạn biên dịch chương trình thử nghiệm đơn giản của bạn với 'clang ++ (các tùy chọn này) test.cpp', nó cũng sẽ thất bại. Tại thời điểm đó, bạn chỉ có thể bắt đầu xóa các tùy chọn để xem tùy chọn nào gây ra sự cố. (Bắt đầu từ phía trước. Đây là một trong những đầu tiên.) – hvd

+0

Lạ lùng rằng 'clang ++ test.cpp' biên dịch, vì' 'yêu cầu C++ 11 (' -std = C++ 11') ... – Jarod42

+0

Phiên bản libstdC++ của bạn là gì? Bạn đã biên dịch 'test.cpp' với libstdC++ chưa? – user2079303

Trả lời

4

Tôi gặp vấn đề tương tự khi biên dịch glogg.

Khi nhận xét đã chỉ ra. nó là stdlib.

Trong makefile sau khi chạy qmake. Thay đổi dòng này từ

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

Để dòng này dưới

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

thông báo "-stdlib = libC++" được quy định tại các CXXFLAGS. Nó được tự động xác định trong các cờ linker, tôi đoán nó cũng cần phải được xác định trong các cờ C++.

-2

Nó nói -Wno-C++ 11-phần mở rộng. Những gì đã viết rằng makefile?

+3

'-W' là một tùy chọn kiểm soát cảnh báo. Nó có liên quan như thế nào? – Angew

Các vấn đề liên quan