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<int> 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需要修改


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值