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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 作者简介:Paul Graham,美国硅谷创业之父。Viaweb(Yahoo Store原型)创始人,硅谷著名创业...
    假壳鱼阅读 2,463评论 0 1
  • 不知不觉,洋洋上幼儿园已经好几个月了。适应期用了一个星期,之后每天去幼儿园情绪都很平稳,每天上幼儿园对洋洋来说是很...
    不倒翁why阅读 2,707评论 0 2
  • 夏天到了,气温节节攀升,各地城市又将开启“蒸笼模式”。纳凉避暑去哪儿? 当然是乐岛海洋王国,在哪里有华北地区最大的...
    一疯上神阅读 1,499评论 0 0
  • 文/转 前些天收到一条男读者留言。 他说最近快被女朋友折磨死了,向我求助: 他女朋友是她大学师妹,他刚毕业,回了老...
    时间苍白了誓言阅读 3,398评论 0 0
  • 一个原则就是要遵守原则 说说我自己为知道却总没有遵守的几个原则。 一次养成一个习惯 习惯养成有一个原则,就是一次只...
    郭志远阅读 2,312评论 0 2

友情链接更多精彩内容