現(xiàn)象:
使用xcode編譯.mm文件時嗦董,會出現(xiàn)編譯錯誤:clang: error: invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)
原因:
libc++ 為 LLVM 項目重新編寫,包含 C++ 11 標(biāo)準(zhǔn)庫瘦黑。如京革,smart pointer,function, tuple幸斥,unordered_map匹摇,unordered_set等。這些庫簡化了代碼甲葬。另外 libc++ 支持 move 語意廊勃,速度也有加快。
libstdc++ 是 GNU 項目的標(biāo)準(zhǔn)庫经窖。Apple 中默認(rèn)的版本是舊的坡垫,不支持新的標(biāo)準(zhǔn)庫特性。
幾年前画侣,Apple 就有意識的去 GNU 了冰悠,使用 Xcode 3 的時候,編譯器還是GNU C++配乱,采用libstdc++「茸浚現(xiàn)在Xcode 5,默認(rèn)就是 LLVM搬泥,libc++桑寨。在Xcode 中,C++ Standard Library 選項中忿檩,還是可以選擇使用尉尾,libstdc++ 或者 libc++。
Xcode中燥透,C++ 語言和庫版本都可以設(shè)置沙咏。設(shè)置不同選項辨图,只是編譯鏈接時候使用不同的參數(shù)。
C++ Language Dialect芭碍,可以選擇語言版本
選項有
C++98[-std=c++98]
GNU++98 [-std=gnu++98]
C++11[-std=c++11]
GNU++11[-std=gnu++11]
C++ Standard Library, 可以選擇庫的版本
選項有
libstdc++ (GNU C++ standard library)
libc++ (LLVM C++ standard library with C++ 11 support)
這兩個是可以自由組合的。而當(dāng)你要寫類似這樣的代碼
std::vector<int> v = { 1, 2, 3, 4, 5 }; for (auto& i : v) { i *= 2; std::cout << i << std::endl; }
就需要新的語言標(biāo)準(zhǔn)孽尽,并有新庫的支持窖壕。
解決:
clang: error: invalid deployment target for -stdlib
補充:
如果是使用pod導(dǎo)入的文件報出的此類問題,pod工程的C++ Standard Library需要修改