libstdc++适配Xcode10与iOS12
编译报错
当你开心得升级完新 macOS,以及新 XCode,准备体验了一把 Dark Mode 编程模式,开心的打开自己的老项目的时候,发现编译不通过了╮(╯_╰)╭
如果你的工程中如果依赖 libstdc++
,无论是你本身的功能用 C++ 跨平台编写,还是你引入了某个 SDK 其内部依赖这个 libstdc++
,都会导致整个工程编译不通过,报出 Undefined symbols
,C++ 的 List 找不到了
原因是苹果在 XCode10 和 iOS12 中移除了 libstdc++
这个库,由 libc++
这个库取而代之,苹果的解释是 libstdc++
已经标记为废弃有5年了,建议大家使用经过了 llvm 优化过并且全面支持C++11的 libc++
库。
临时解决办法
- 编译问题
拷贝缺失的libstdc++
在 XCode10 正式发布前,XCode10 目前是 Beta 版,和 XCode9 正式版可以共存
于是从 XCode9 的目录里,把缺失的 .tbd 文件拷贝过来,要记得拷贝2套,一套是模拟器的,一套是设备的,可以简单的用下面的命令
1 |
cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libstdc++.* /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/ cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libstdc++.* /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/ |
现在 XCode10 正式发布了,很多人已经没有 XCode9 来拷贝了,于是这里放出来文件提供下载
将 libstdc++.6.0.9.tbd.zip 解压,放到目录
1 |
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/ |
拷贝过去后,你就可以在新 XCode(黑暗模式真心舒服)下面看到libstdc++
了,放心的添加到工程里吧
- 模拟器运行
拷贝libstdc++
之后就可以编译通过了,但 App 在模拟器里一运行就崩溃,就会报动态链接库装载出错,看出错提示说是 .dylib 与这个模拟器不符合。这是 XCode10 自带的 iOS12 模拟器的问题,在 XCode10 中安装 iOS11 的模拟器运行环境,然后切换到 iOS11 模拟器运行,一切问题没有。如果想在 XCode12 iOS12 模拟器中运行:
a. 将 libstdc++_sim.zip 解压,放到目录
1 |
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/ |
b. 将 libstdc++.dylib_sim.zip 解压,放到目录
1 |
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/ |
- 真机运行
拷贝 libstdc++
之后,使用 iOS12 的真机运行,没有啥太大的问题
正确解决办法
- 如果你自己的业务模块使用了
libstdc++
,那么就把模块代码重新调整为依赖libc++
,然后重新检查是否存在问题,重新编译 - 如果你引用的三方库使用了
libstdc++
,那么向三方库寻求支持,进行升级
libc++
Apple 为什么在 Mavericks 里把 C++ 标准库从 libstdc++ 改成 libc++?
其他关于此问题的讨论
libstdc++适配Xcode10与iOS12的更多相关文章
- 更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9
更新Xcode10与iOS12 遇到的bug:library not found for -lstdc++.6.0.9 解决办法:删除pod里导入的库文件,跑一下pod,再重新导入这些库文件,跑pod ...
- iOS火焰动画效果、图文混排框架、StackView效果、偏好设置、底部手势等源码
iOS精选源码 高性能图文混排框架,构架顺滑的iOS应用. 使用OpenGLE覆盖阿尔法通道视频动画播放器视图. 可选最大日期截至当日日期的日期轮选器ChooseDatePicker 简单轻量的图片浏 ...
- iOS12适配指南
1.重复文件报错 build Phases-> 删除多余的info.plist 2.library not found for -lstdc++ 苹果在XCode10和iOS12中移除了libs ...
- iOS适配整理
iOS12适配问题 1.StatusBar内部结构改变 现象:crash crash log: -[_UIStatusBarIdentifier isEqualToString:]: unrecogn ...
- iOS----------适配iOS12
library not found for -lstdc++.6.0.9 原因是苹果在XCode10和iOS12中移除了libstdc++这个库,由libc++这个库取而代之,苹果的解释是libstd ...
- Xcode10趟坑之路
https://www.jianshu.com/p/12558d39ba08 先默念别有太多坑啊 跑起来吧 结果没有跑起来 1.第一个坑 Showing Recent Messages :-1: Mu ...
- 报错:library not found for -lstdc++.6.0.9
在Xcode 10开发中, 报错:library not found for -lstdc++.6.0.9 解决方案:将Xcode9的libstdc++6.0.9.tbd拷贝到Xcode10中使用 X ...
- iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码
iOS精选源码 日期时间选择器,swift Space Battle 宇宙大战 SpriteKit游戏源码 LLDebugTool - 便捷的IOS调试工具(新增截屏功能) 相机扫描or长按识别二维码 ...
- [Swift通天遁地]九、拔剑吧-(10)快速创建美观的聊天界面:可发送文字、表情、图片
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
随机推荐
- jquery监听video标签视频播放暂停状态
由于jquery中没有video的paly,pause方法,所以在使用jquery来控制视频的播放的播放状态时会出现问题 之前的代码: let $video = $('#video'); $('.pl ...
- java线程阻塞唤醒的四种方式
java在多线程情况下,经常会使用到线程的阻塞与唤醒,这里就为大家简单介绍一下以下几种阻塞/唤醒方式与区别,不做详细的介绍与代码分析 suspend与resume Java废弃 suspend() 去 ...
- spark Could not write all entries
使用 spark 将 dataFrame 储存到 elasticsearch 出现如下报错: Caused by: org.elasticsearch.hadoop.EsHadoopException ...
- 编译安装mysql5.7.24踩的坑
1.报错如下:CMake Error at cmake/boost.cmake:76 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 - ...
- springboot+springcloud集成jar
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- SB!SB!SB!
Topic Link http://ctf5.shiyanbar.com/stega/ste.png SB!SB!SB! 其实很简单,可别真的变成 SB! 1)根据链接提示,直接用stegsolve ...
- C++STL模板库序列容器之vector
目录 STL之Vecter 一丶STL简介 二丶Vector用法 1.vector容器的使用 2.vector迭代器. 3.vector中的方法. 三丶常用算法 1.常见算法中的算法方法. 2.sor ...
- SmartSql 类型处理器
Nuget 安装 Install-Package SmartSql.TypeHandler -Version 3.0.1 SmartSql.TypeHandler 包括了俩种类型的类型处理程序: Js ...
- 教你MySQL Binlog实用攻略
本文由云+社区发表 1.概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undo log是完全不同的日志:其主要是用来记录对mysql数据更新或潜在发 ...
- 【MongoDB】MongoDB环境配置
软件下载与安装 1.mongDB下载,可到官网下载,我用的是3.4.6版本.可以放到任意目录下,我的MongDB安装目录为 D:\software\small_softeware\MongoDB 2. ...