invalid deployment target for -stdlib=libcxx 问题详解

现象:
使用xcode编译.mm文件时,会出现编译错误:clang: error: invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)

原因:
libc++ 为 LLVM 项目重新编写,包含 C++ 11 标准库。如,smart pointer,function, tuple,unordered_map,unordered_set等。这些库简化了代码。另外 libc++ 支持 move 语意,速度也有加快。

libstdc++ 是 GNU 项目的标准库。Apple 中默认的版本是旧的,不支持新的标准库特性。
几年前,Apple 就有意识的去 GNU 了,使用 Xcode 3 的时候,编译器还是GNU C++,采用libstdc++。现在Xcode 5,默认就是 LLVM,libc++。在Xcode 中,C++ Standard Library 选项中,还是可以选择使用,libstdc++ 或者 libc++。

Xcode中,C++ 语言和库版本都可以设置。设置不同选项,只是编译链接时候使用不同的参数。
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)
这两个是可以自由组合的。而当你要写类似这样的代码
std::vector v = { 1, 2, 3, 4, 5 }; for (auto& i : v) { i *= 2; std::cout << i << std::endl; }
就需要新的语言标准,并有新库的支持。

解决:
clang: error: invalid deployment target for -stdlib
补充:
如果是使用pod导入的文件报出的此类问题,pod工程的C++ Standard Library需要修改

你可能感兴趣的:(invalid deployment target for -stdlib=libcxx 问题详解)